我需要填充一个选择器

I need to populate a picker

我是 Swift 的新编程人员,我需要的是填充有 Json 数据的 pickerView(以编程方式完成)。我成功地用对象名称填充了选择器,但我需要 select 名称并捕获 Json 数据中出现的对象的 ID。

非常感谢用代码行回答。

• 首先创建一个数组来存储获取的“id”。像在 dataZoneName 中那样保存 id。

• 然后在选择器 didSelectRow 委托上使用行索引选择与所选字符串对应的 ID

• 现在 idToken 具有选择器中所选名称的 ID。

• 还将 alamofire 数据获取代码从 viewdidLoad 移至单独的函数。还要为字符串类型的id声明一个参数。

假设您正在使用来自 json 的 SwiftyJson 解析和 Alamofire 来命中 API。

当您点击 API 时,您可以使用 swiftyjson 制作模型

import Foundation
import SwiftyJSON
struct UnitsModel {

var id: Int = 0
var name: String = ""

init(fromJson Json: JSON!) {
    
    if Json.isEmpty {
        return
    }
    
    id = Json["id"].intValue
    name = Json["name"].stringValue
}}

现在您需要将 json 响应映射到您的数组,为此您可以使用

fileprivate func APIRequestGetUnitsCompleted(response: Any?, error: Error?) {
    if let response = response{
        let json = JSON(response)
        
        let units = json["units"].arrayValue
        
        for index in 0..<units.count{
            let model = UnitsModel(fromJson: units[index])
            unitsArray.append(model)
        }
        
    }else{
        //print("Error")
    }
}

在您的视图控制器中创建一个您刚刚创建的模型类型数组,并创建一个变量来存储 ID

var unitsArray = [UnitsModel]()
var selectedUnitId = 0

现在您可以使用以下代码:

ViewController: UIPickerViewDelegate, UIPickerViewDataSource{


func createPickerView() {
    
    pickerView.delegate = self
    unitTextField.inputView = pickerView
    
}

func dismissPickerView() {
    let toolBar = UIToolbar()
    toolBar.sizeToFit()
    let button = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(self.action))
    toolBar.setItems([button], animated: true)
    toolBar.isUserInteractionEnabled = true
    unitTextField.inputAccessoryView = toolBar
}

@objc func action() {
    view.endEditing(true)
}

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

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

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    
    return unitsArray[row].name
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    unitTextField.text = unitsArray[row].name
    selectedUnitId = unitsArray[row].id
    // selectedUnitId is variable in which id of selected option from picker view will be saved.

}}