UIPickerView didSelectRow 之后的空变量
Posted
技术标签:
【中文标题】UIPickerView didSelectRow 之后的空变量【英文标题】:Empty variable after UIPickerView didSelectRow 【发布时间】: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 ,对我有用,感谢您解释它是如何工作的!!
【参考方案1】:
let json = try JSONDecoder().decode([CustomerData].self, from: data)
for klient in json
self.DaneSkladu_array.append(klient.KrotkaNazwa)
// print(self.DaneSkladu_array.count) // place print statement here if you want to see the number of items after every new client inserted
print(self.DaneSkladu_array.count) // Print just the total amound of clients after inserting them all
...
【讨论】:
以上是关于UIPickerView didSelectRow 之后的空变量的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 didSelectRow 为多个 UIPickerView 使用数据
通过 didSelectRow UIPickerView 传递托管对象数据
UIPickerView didSelectRow 之后的空变量