Deserialize JSON / NSDictionary to Swift objects

前端 未结 13 1554
情歌与酒
情歌与酒 2020-11-29 18:43

Is there a way to properly deserialize a JSON response to Swift objects resp. using DTOs as containers for fixed JSON APIs?

Something similar to http://james.newtonk

13条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-29 18:57

    Using quicktype, I generated your model and serialization helpers from your sample:

    import Foundation
    
    struct User: Codable {
        let name: String
        let email: String
        let password: String
    }
    
    extension User {
        static func from(json: String, using encoding: String.Encoding = .utf8) -> OtherUser? {
            guard let data = json.data(using: encoding) else { return nil }
            return OtherUser.from(data: data)
        }
    
        static func from(data: Data) -> OtherUser? {
            let decoder = JSONDecoder()
            return try? decoder.decode(OtherUser.self, from: data)
        }
    
        var jsonData: Data? {
            let encoder = JSONEncoder()
            return try? encoder.encode(self)
        }
    
        var jsonString: String? {
            guard let data = self.jsonData else { return nil }
            return String(data: data, encoding: .utf8)
        }
    }
    

    Then parse User values like this:

    let user = User.from(json: """{
      "name": "myUser", 
      "email": "user@example.com",
      "password": "passwordHash"
    }""")!
    

提交回复
热议问题