UIPickerView didSelectRow 之后的空变量

Posted

技术标签:

【中文标题】UIPickerView didSelectRow 之后的空变量【英文标题】:Empty variable after UIPickerView didSelectRow 【发布时间】:2021-02-03 14:12:49 【问题描述】:

我是 Swift 新手。

选择行后,我尝试从 WebAPI 读取一些 JSON 数据。除了一件事,一切都很好。我不知道为什么变量DaneSkladu_arrayURLSession 部分(最后打印)之外是空的。你能告诉我我做错了什么吗?

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 使用数据

UIPickerView didSelectRow 未调用

通过 didSelectRow UIPickerView 传递托管对象数据

UIPickerView didSelectRow 之后的空变量

UIPickerView 作为多个 UITextField 的 inputView

xcode iphone UIPickerView