JSON访问数组内的多个实例

时间:2018-10-13 04:17:01

标签: ios arrays json swift

我正在使用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来访问第一个标签,但是如果不确定如何访问每个标签并放入一个标签中。

2 个答案:

答案 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
}