【问题标题】:JSON accessing multiple instances inside of an arrayJSON 访问数组内的多个实例
【发布时间】:2018-10-13 04:17:01
【问题描述】:

我正在使用 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(名称:“漫威娱乐”)、Film_Bee.DetailsView.Production(名称:“索尼影业”)]

我想要做的是访问数组中的每个name。我知道要访问第一个,我可以使用production.first?.name,但如果我不确定如何访问每一个以放入单个标签中。

【问题讨论】:

  • 您要将三个公司的名称添加到单个 UIlabel 中还是三个 UIlabel 中?
  • 我想将它们放入一个标签中。
  • 我对您的previous question 的回答显示了如何获取数组中的所有项目。

标签: ios arrays json swift


【解决方案1】:

Prashant 点了。我只是另外补充一点,可能对你有帮助。

我相信你知道像 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
}

【讨论】:

    【解决方案2】:

    试试这个

    let production = details.production_companies.map{$0.name}

    production_companies 是数组。您必须使用 map 对其进行迭代并获得其简单易懂的名称对吗?

    不相关但不要使用try!你应该正确处理错误使用do try catch block

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 2023-04-07
      • 2021-08-26
      • 2014-06-07
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多