다음은 code입니다.신속한 코드 가능 디코드 수동 선택 변수
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\").
입니다.
옵션을 만드는 방법과 존재하지 않을 때 크래시하지 않는 방법에 대한 아이디어가 있으십니까? 나는 또한 다른 이유 때문에 init
함수가 필요하지만, 그냥 무슨 일이 일어나고 있는지 설명하는 간단한 예제를 만들었습니다.
비교 [Deconable for JSON Parsing을 사용할 때 선택 사항과 decodeIfPresent의 차이점] (https://stackoverflow.com/questions/46292325/what-is-difference-between-optional-and-decodeifpresent-when-using) -decodable-for). –
@ MartinR 매우 도움이됩니다! 정말 고마워. –