gpt4 book ai didi

json - 使用 Gloss 反序列化数组

转载 作者:行者123 更新时间:2023-11-28 06:21:26 24 4
gpt4 key购买 nike

Gloss library 使得在 Swift 中处理 JSON 变得更加容易。然而,有一个用例我无法在文档中弄清楚。假设您有一个包含对象数组的键:

{
"id" : 40102424,
"name": "Gloss",
"description" : "A shiny JSON parsing library in Swift",
"html_url" : "https://github.com/hkellaway/Gloss",
"people" : [
{
"id" : 5456481,
"login" : "hkellaway1"
},
{
"id" : 5456482,
"login" : "hkellaway2"
},
{
"id" : 5456483,
"login" : "hkellaway3"
}
]
"language" : "Swift"
}

尝试像这样初始化它会产生错误:

let people : Array<People>?
required init?(json: JSON)
{
// Error: Value of optional type '[JSON]?' not unwrapped; did you mean to use '!' or '?'?
self.people = [People].from(jsonArray: "people" <~~ json)
}

我应该为“from”函数传递什么?强制展开 json 可能会导致崩溃。

编辑:

使用 guard 语句是可行的,但“people”键可能包含也可能不包含或具有零个对象。在这种情况下,以下代码将只为整个对象返回 nil:

guard let jarr: [JSON] = "" <~~ json else {
return nil
}
self.people = [People].from(jsonArray: jarr)

使用 if let 给我一个错误:

let people : Array<People>?

// Error: Property 'self.people' not initialized at implicitly generated super.init call
required init?(json:JSON)
{
if let jarr : [JSON] = "people" <~~ json {
self.people = [People].from(jsonArray: jarr)
}
}

最佳答案

在创建数组之前尝试从 json 中解包 people 数组。 init 方法是可失败的,所以如果您返回 nil 也没关系。

let people: Array<People>?
required init?(json: JSON) {
guard let people: [JSON] = "people" <~~ json, else {
return nil
}
self.people = [People].from(people)
}

编辑:

let people: [People] = []
required init?(json: JSON) {
if let peopleJSON: [JSON] = "people" <~~ json,
let people = [People].from(people) {
self.people = people
}
}

这样,people 将始终至少是一个空数组,如果有人要添加到其中,则会添加他们。

关于json - 使用 Gloss 反序列化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43318743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com