【发布时间】:2018-01-25 04:44:14
【问题描述】:
我搜索(并找到了一些使用静态数组),但找不到任何与我尝试使用 JSON 填充结构做的事情相关的内容。
我是 Swift 和 StackExchange 的新手,所以如果我错过了,请告诉我!
我从 JSON 代码中填充了三个结构。 注意:departmentName 与其他两个结构体中的 Department 相同
struct Dept: Decodable {
let departmentName: String
}
struct Company: Decodable {
let companyName: String
let Department: String
}
struct Spread: Decodable {
let spreadName: String
let spreadType: String
let Department: String
}
这些在 viewDidLoad 上加载。 数组(ish)形式的数据示例如下:
Department = "Department 1"
Company = ["Company 1":"Department 1","Company 2":"Department 2"]
Spread = ["Spread 1":"Department 1","Spread 2 ":"Department 2"]
我当前的 PickerView 函数代码:
public func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
var countRows : Int = dep.count
if pickerView == companyPicker {
countRows = self.company.count
}
else if pickerView == spreadPicker {
countRows = self.spread.count
}
else if pickerView == incidentPicker {
countRows = self.incident.count
}
return countRows
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == deptPicker {
let titleRow = dep[row].departmentName
return titleRow
}
else if pickerView == companyPicker {
let titleRow = company[row].companyName
return titleRow
}
else if pickerView == spreadPicker {
let titleRow = spread[row].spreadName
return titleRow
}
else if pickerView == incidentPicker {
let titleRow = incident[row].incidentTypeName
return titleRow
}
return ""
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == deptPicker {
self.deptartmentTextField.text = self.dep[row].departmentName
self.deptartmentTextField.resignFirstResponder()
}
else if pickerView == companyPicker {
self.companyTextField.text = self.company[row].companyName
self.companyTextField.resignFirstResponder()
}
else if pickerView == spreadPicker {
self.spreadTextField.text = self.spread[row].spreadName
self.spreadTextField.resignFirstResponder()
}
else if pickerView == incidentPicker {
self.incidentTextField.text = self.incident[row].incidentTypeName
self.incidentTextField.resignFirstResponder()
}
}
我想我最大的问题是是否有一种方法可以根据 Dept 选择器过滤 Company 和 Spread 选择器。
【问题讨论】:
-
我自己解决了这个问题。万一有人过来找。我为第二个和第三个选择器视图添加了过滤和附加到新数组的函数,然后重新加载了数据。
-
你可以回答你自己的问题,让感兴趣的人更清楚。
标签: ios json swift struct uipickerview