【发布时间】:2020-06-10 18:18:08
【问题描述】:
我有以下 JSON 格式的数据:
{"contacts":[{"name":"Bob"},{"name":"Greg"},{"name":"Sally"},{"name":"Will"},{"name":"George"},
{"name":"Charlie"},{"name":"Alice"},{"name":"Albert"},{"name":"Alfred"},{"name":"Bart"},
{"name":"Dan"},{"name":"Dave"},{"name":"Eddie"},{"name":"Frank"},{"name":"Ralph"},{"name":"Tammy"},
{"name":"Tom"},{"name":"James"},{"name":"John"},{"name":"Quincy"},{"name":"Peter"},{"name":"Richard"},
{"name":"Zachary"},{"name":"Zbiginew"},{"name":"Tentacool"},{"name":"Tentacruel"},{"name":"Metapod"},
{"name":"Meowth"}]}
JSON 存储在某个 URL 中,我想收集信息并将其放入一个数组中,理想情况下看起来像 [Bob, Greg, Sally, Will...]。
现在我得到了代码:
let jsonLocation = "http://raw.myjsondatalocation.com/contact.json"
guard let url = URL(string: jsonLocation) else {
return
}
URLSession.shared.dataTask(with: url){ (data,response,error) in
guard let data = data else { return }
do{
let decoder = JSONDecoder()
let ListOfNames = try decoder.decode(Contact.self, from:data).contacts
// print(myListOfContacts)
print(ListOfNames[0].name)
}
catch let jsonErr{
print("Error!",jsonErr)
}
}.resume()
我使用 Codable 来解析 JSON。这似乎工作正常,因为它返回一个表单为[[ContactList.Contact.PersonalInfo(name: "Bob")... 的项目数组,当我调用print(ListOfNames[0].name) 时,它适当地返回“Bob”,但如果我把它放在 URLSession 之外,它说它没有解决。
名称数组稍后将被放入 TableView。我真的不知道如何解决这个问题。有人可以帮我看看吗?
【问题讨论】:
-
在
URLSession块之外将listOfNames属性声明为var。然后在你使用listOfNames = try decoder ...的块内。请注意,根据 Swift 约定,属性名称以小写字母开头。 -
不要将结构数组映射到字符串数组。使用
PersonalInfo作为数据源数组。也许您想在将来添加更多个人信息。