【发布时间】:2021-02-03 14:12:49
【问题描述】:
我是 Swift 新手。
选择行后,我尝试从 WebAPI 读取一些 JSON 数据。除了一件事,一切都很好。我不知道为什么变量DaneSkladu_array 在URLSession 部分(最后打印)之外是空的。你能告诉我我做错了什么吗?
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
let WybranySklad = NrExact_array[row].prefix(6)
lbl_NumerSkladu.text = String(WybranySklad)
//self.customerPV.reloadAllComponents()
let url = URL(string: "https://...")
URLSession.shared.dataTask(with: url!) { (data, response, error) in
guard let data = data else {return}
do {
let json = try JSONDecoder().decode([CustomerData].self, from: data)
for klient in json{
self.DaneSkladu_array.append(klient.KrotkaNazwa)
if(klient.Nr_Exact == String(WybranySklad))
{
}
}
} catch let jsonError {
print ("Blad json: ", jsonError)
}
}.resume()
print(self.DaneSkladu_array.count)
}
【问题讨论】:
-
print(self.DaneSkladu_array.count)在数据加载之前执行,因为URLSession.shared.dataTask(...).resume()创建了一个异步任务并立即将控制权返回给当前队列,而无需等待通过网络完成下载。 -
好的,谢谢。你能给我一些提示我怎样才能捕捉到这些数据吗?
-
我找到了 DispatchQueue.main.async {},对我有用,感谢您解释它是如何工作的!!
标签: swift uipickerview