【问题标题】:Empty variable after UIPickerView didSelectRowUIPickerView 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 {},对我有用,感谢您解释它是如何工作的!!

标签: swift uipickerview


【解决方案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
  ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多