如何在Swift 3.0中使用UIPickerView将JSON显示到UILabel中?

如何在Swift 3.0中使用UIPickerView将JSON显示到UILabel中?,json,swift3,uipickerview,Json,Swift3,Uipickerview,我使用PHP获得这些JSON输出 [ {"number":"001","name":"MIKE"}, {"number":"002","name":"JOSH"} ] 在Swift中,我成功地选择了名称值并将其显示在UIPickerView中,如下所示 DropdownJSON.swift 但我的目标是在函数pickerView didSelectRow中将JSON输出编号显示为numberBl,将名称显示为nameLbl 原因是我想以后再发这个号码。nameLbl仅显示在屏幕

我使用PHP获得这些JSON输出

[
    {"number":"001","name":"MIKE"},
    {"number":"002","name":"JOSH"}
]
在Swift中,我成功地选择了名称值并将其显示在UIPickerView中,如下所示

DropdownJSON.swift

但我的目标是在函数pickerView didSelectRow中将JSON输出编号显示为numberBl,将名称显示为nameLbl

原因是我想以后再发这个号码。nameLbl仅显示在屏幕页面上

可能吗?如果有人能在这件事上提供帮助,我将不胜感激

更新


谢谢。

首先,您需要使用URLSession.dataTask从URL而不是NSDatacontentsOf:获取响应。同样在Swift 3中,使用本机URL和数据,而不是NSURL和NSData

现在的问题是您没有存储数字值表单字典。管理这种情况的最简单方法是创建struct,并用它存储number和name值。之后,创建该结构的数组,而不是任何对象的数组

现在声明一个struct Person数组,并使用getDropdownJSON方法在其中添加数据

var persons = [Person]()

func getDropdownJSON() {
    let url = URL(string: "http://localhost/getDropdownJSON.json")
    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
        guard let data = data, error == nil else {
            print(error?.localizedDescription)
            return
        }
        if let array = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [[String:Any]] {
            self.persons = array.flatMap(Person.init)
            DispatchQueue.main.async {
                dropdownPV.reloadAllComponents()
            }
        }
    }
    task.resume()
}
现在在PickerViewDelegate方法中,使用此数组填充其组件

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return self.persons.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return persons[row].name
}
现在在didSelectRow中,您只需访问数组对象,就可以同时获得数字和名称

var persons = [Person]()

func getDropdownJSON() {
    let url = URL(string: "http://localhost/getDropdownJSON.json")
    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
        guard let data = data, error == nil else {
            print(error?.localizedDescription)
            return
        }
        if let array = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [[String:Any]] {
            self.persons = array.flatMap(Person.init)
            DispatchQueue.main.async {
                dropdownPV.reloadAllComponents()
            }
        }
    }
    task.resume()
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return self.persons.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return persons[row].name
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if row >= self.persons.count { 
        return
    }

    self.numberLbl.text = self.persons[row].number
    self.nameLbl.text = self.persons[row].name
    self.dropdownPV.isHidden = true
    self.dropdownTxt.resignFirstResponder()
}