我正在使用JSONDecoder通过API访问JSON数据。在此JSON数据中有几个[arrays]
。我遇到了访问出现密钥的每个实例的问题。
这是代码:
var details = [Details]()
var production = [Production]()
struct Details: Codable {
let title: String
let poster_path: String?
let id: Int?
let production_companies: [Production]
}
struct Production: Codable {
let name: String
}
let task = session.dataTask(with: request, completionHandler: { (dataOrNil, response, error) in
if let data = dataOrNil {
do { let details = try! JSONDecoder().decode(Details.self, from: data)
let production = details.production_companies
print(production)
}
}
})
这是print(production)
打印到控制台的内容:
[Film_Bee.DetailsView.Production(名称:“哥伦比亚影业”),Film_Bee.DetailsView.Production(名称:“ Marvel Entertainment”),Film_Bee.DetailsView.Production(名称:“ Sony Pictures”)]
我想做的是访问数组中的每个name
。我知道可以使用production.first?.name
来访问第一个标签,但是如果不确定如何访问每个标签并放入一个标签中。
答案 0 :(得分:1)
尝试
let production = details.production_companies.map{$0.name}
production_companies
是数组。并且您必须使用map对其进行迭代,并获得易于理解的名称?
不相关,但不要使用try!
,您应该正确处理错误使用do try catch block
答案 1 :(得分:1)
有害物质已经存在。我只补充一点点可能对您有帮助。
我相信您知道for或forEach这样的快速循环可以查看您的字符串列表
production.forEach { model in
print(model.name)
}
对于您的问题,您需要加入字符串列表。当您需要更新UI时,请使用DispatchQueue。
let productionList = production.map{$0.name}
let strings = productionList.joined(separator: " ") //use "\n" if you wish new line
print("stringList: \(strings)")
DispatchQueue.main.async() {
yourLabel.text = strings
}