我正在从远程服务器下载JSON数组:
var colores = [Colores]()
func downloadJSONColores(completed: @escaping () -> ()) {
let url = URL(string: "https://../colores.php")
URLSession.shared.dataTask(with: url!) { (data,response,error) in
print(data as Any)
print(response as Any)
if error == nil {
do {
self.colores = try JSONDecoder().decode([Colores].self, from: data!)
DispatchQueue.main.async {
completed()
}
}catch{
}
}
}.resume()
}
我有一个Colores的结构类:
struct Colores:Decodable {
let id: Int
let nombre: String
let icono: String
let modelo: Int
let caracterista: Int
}
我需要用解码的JSON对象填充PickerView,将字段nombre显示为标题,并存储来自pickerview所选项目的字段id。
我在viewDidLoad中按如下方式调用downloadJSONColores方法:
downloadJSONColores {
coloresPV.reloadData()
}
其中coloresPV是我的pickerView,但显然,这种方式仅适用于collectionViews,而不适用于pickerViews。在执行downloadJSONColores时,哪种方法是填充pickerView的最佳方法?
看看UIPickerViewDataSource和UIPickerViewDelegate协议。
如果我正确理解了您的问题,则需要在ViewController中保留变量colors: [Colores]
。
然后:
在执行colors.count
的func numberOfComponents(in: UIPickerView) -> Int
功能时返回UIPickerViewDataSource
,
在pickerView(UIPickerView, titleForRow: Int, forComponent: Int) -> String?
函数的UIPickerViewDelegate
函数的实现中返回正确的标题。