我是 Swift 的新手,我需要的是一个填充有 Json 数据的pickerView(以编程方式完成)。我成功地用对象的名称填充了选择器,但我需要选择名称并捕获 Json 数据中出现的对象的 id。
我真的很感谢代码行的答案。
我是 Swift 的新手,我需要的是一个填充有 Json 数据的pickerView(以编程方式完成)。我成功地用对象的名称填充了选择器,但我需要选择名称并捕获 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.
}}