【发布时间】:2018-04-11 08:09:41
【问题描述】:
我一直在使用Codable 协议
这是我的JSON 文件:
{
"Adress":[
],
"Object":[
{
"next-date":"2017-10-30T11:00:00Z",
"text-sample":"Some text",
"image-path":[
"photo1.png",
"photo2.png"
],
"email":"john.doe@test.com",
"id":"27"
},
{
"next-date":"2017-10-30T09:00:00Z",
"text-sample":"Test Test",
"image-path":[
"image1.png"
],
"email":"name.lastename@doe.com",
"id":"28"
}
]
}
我只需要关注 Object 数组,“image-path”数组可以包含 0、1 或 2 个字符串。
这是我的实现:
struct Result: Codable {
let Object: [MyObject]
}
struct MyObject: Codable {
let date: String
let text: String
let image: [String]
let email: String
let id: String
enum CodingKeys: String, CodingKey {
case date = "next-date"
case text = "text-sample"
case image = "image-path"
case email = "email"
case id = "id"
}
init() {
self.date = ""
self.text = ""
self.image = []
self.email = ""
self.id = ""
}
}
在以这种方式请求和获取 JSON 数据后,我从我的服务类中调用它:
if let data = response.data {
let decoder = JSONDecoder()
let result = try! decoder.decode(Result, from: data)
dump(result.Object)
}
除了 image 属性的 [String] 之外,一切正常
但它无法编译,或者我收到“Expected to decode...”错误。
我应该如何处理 nil/no data 场景?
【问题讨论】:
-
基本上代码(第一个实现)应该可以工作,但 JSON 无效。如果您一直使用解码器,则根本不需要
init方法。