我有以下code。Swift Codable解碼手動可選變量
import Foundation
let jsonData = """
[
{"firstname": "Tom", "lastname": "Smith", "age": "28"},
{"firstname": "Bob", "lastname": "Smith"}
]
""".data(using: .utf8)!
struct Person: Codable {
let firstName, lastName: String
let age: String?
enum CodingKeys : String, CodingKey {
case firstName = "firstname"
case lastName = "lastname"
case age
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
firstName = try values.decode(String.self, forKey: .firstName)
lastName = try values.decode(String.self, forKey: .lastName)
age = try values.decode(String.self, forKey: .age)
}
}
let decoded = try JSONDecoder().decode([Person].self, from: jsonData)
print(decoded)
問題是它在age = try values.decode(String.self, forKey: .age)
上崩潰。當我拿這個init
函數它工作正常。錯誤是No value associated with key age (\"age\").
。
任何關於如何使這個可選的想法,並沒有崩潰時,它不存在?由於其他原因,我也需要這個函數,但只是一個簡單的例子來解釋發生了什麼。
比較[使用Decodable for JSON解析時可選和decodeIfPresent之間有什麼區別?](https://stackoverflow.com/questions/46292325/what-is-difference-between-optional-and-decodeifpresent-when-using -decodable換)。 –
@MartinR非常有幫助!非常感謝。 –