Swift Codable的使用
这是swift4的功能,可以将json与model进行相互转换。这儿总结一下遇到的坑。
json中没有的字段,decode会失败,比如json中只有firstName与lastName,如果模型中还有一个nickName并且有默认值就会失败,要说明映射字段才可以,如下定义就正确。
struct Person: Codable {
var firstName: String
var lastName: String
var nickName: String = "test"
private enum CodingKeys: String, CodingKey {
case firstName, lastName
}
}
当然也可以手动的进行decode与encode,如
struct Person: Codable {
var firstName: String
var lastName: String
// Since fullName is a computed property, it's excluded by default
var fullName: String {
return firstName + " " + lastName
}
private enum CodingKeys: String, CodingKey {
case firstName
case lastName
case fullName
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
firstName = try container.decode(String.self, forKey: .firstName)
lastName = try container.decode(String.self, forKey: .lastName)
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(firstName, forKey: .firstName)
try container.encode(lastName, forKey: .lastName)
try container.encode(fullName, forKey: .fullName)
}
}