Can Swift convert a class / struct data into dictionary?

前端 未结 3 1191
梦如初夏
梦如初夏 2020-11-30 03:41

For example:

class Test {
    var name: String;
    var age: Int;
    var height: Double;
    func convertToDict() -> [String: AnyObject] { ..... }
}

let         


        
3条回答
  •  长情又很酷
    2020-11-30 04:00

    You could use Reflection and Mirror like this to make it more dynamic and ensure you do not forget a property.

    struct Person {
      var name:String
      var position:Int
      var good : Bool
      var car : String
    
      var asDictionary : [String:Any] {
        let mirror = Mirror(reflecting: self)
        let dict = Dictionary(uniqueKeysWithValues: mirror.children.lazy.map({ (label:String?, value:Any) -> (String, Any)? in
          guard let label = label else { return nil }
          return (label, value)
        }).compactMap { $0 })
        return dict
      }
    }
    
    
    let p1 = Person(name: "Ryan", position: 2, good : true, car:"Ford")
    print(p1.asDictionary)
    

    ["name": "Ryan", "position": 2, "good": true, "car": "Ford"]

提交回复
热议问题