Cha*_*ish 19 swift swift4 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)
Run Code Online (Sandbox Code Playgroud)
问题是它正在崩溃age = try values.decode(String.self, forKey: .age)
.当我把这个init
功能拿出来时它工作正常.错误是No value associated with key age (\"age\").
.
关于如何制作可选项的任何想法,如果它不存在则不会崩溃?我还需要init
其他功能,但只是举了一个简单的例子来解释发生了什么.
Ole*_*huk 56
年龄是可选的:
let age: String?
Run Code Online (Sandbox Code Playgroud)
所以尝试以这种方式解码:
let age: String? = try values.decodeIfPresent(String.self, forKey: .age)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8571 次 |
最近记录: |