如何将字典加载到 UIPickerView
How to Load a Dictionary into a UIPickerView
如何在 Swift 中将字典中的数据加载到 PickerView 中?
我有一个带有 String
键(州)和 Double
值(税)的字典,我想做的是能够将键设置为 titleForRow
的 UIPickerView 并在 textField
.
中显示所选 key
的值
// Ideal Dictionary
private var states:[String:Double] = ["Alabama":6.000, "Illinois":7.000, "Oregon":8.000, "Wisconsin":9.000]
我能够使用两个数组来执行上述操作,一个用于州,一个用于税收,但我拒绝认为从字典加载是不可能的。
这是我目前可以使用的,但使用了两个数组。
// Arrays
private var stateName = ["Alabama", "Illinois", "Oregon", "Wisconsin"]
private var stateTax = ["6.000", "7.000", "8.000", "9.000"]
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return stateName.count
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
inputTaxRate.text = stateTax[row]
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return stateName[row]
}
有什么改进上述代码的建议吗?
您可以使用字典,但字典没有顺序。您希望对数据进行排序。如果顺序是按字母顺序排列的,您将有效地将字典变成与现在相同的两个数组。您不想在每次调用 titleForRow
时重复执行此操作,因此您希望数组是永久的。既然如此,你的两个阵列证明是一个很好的解决方案。您正在以无情的效率获取数据,而这正是您想要的。
字典是无序的,所以最好使用数组。
您可以使用一组命名元组将您的数据保存在一个数组中:
let stateInfo:[(name: String, tax: Double)] = [("Alabama", 6.000), ("Illinois", 7.000), ("Oregon", 8.000), ("Wisconsin", 9.000)]
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return stateInfo.count
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
inputTaxRate.text = stateInfo[row].tax
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return stateInfo[row].name
}
如何在 Swift 中将字典中的数据加载到 PickerView 中?
我有一个带有 String
键(州)和 Double
值(税)的字典,我想做的是能够将键设置为 titleForRow
的 UIPickerView 并在 textField
.
key
的值
// Ideal Dictionary
private var states:[String:Double] = ["Alabama":6.000, "Illinois":7.000, "Oregon":8.000, "Wisconsin":9.000]
我能够使用两个数组来执行上述操作,一个用于州,一个用于税收,但我拒绝认为从字典加载是不可能的。
这是我目前可以使用的,但使用了两个数组。
// Arrays
private var stateName = ["Alabama", "Illinois", "Oregon", "Wisconsin"]
private var stateTax = ["6.000", "7.000", "8.000", "9.000"]
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return stateName.count
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
inputTaxRate.text = stateTax[row]
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return stateName[row]
}
有什么改进上述代码的建议吗?
您可以使用字典,但字典没有顺序。您希望对数据进行排序。如果顺序是按字母顺序排列的,您将有效地将字典变成与现在相同的两个数组。您不想在每次调用 titleForRow
时重复执行此操作,因此您希望数组是永久的。既然如此,你的两个阵列证明是一个很好的解决方案。您正在以无情的效率获取数据,而这正是您想要的。
字典是无序的,所以最好使用数组。 您可以使用一组命名元组将您的数据保存在一个数组中:
let stateInfo:[(name: String, tax: Double)] = [("Alabama", 6.000), ("Illinois", 7.000), ("Oregon", 8.000), ("Wisconsin", 9.000)]
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return stateInfo.count
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
inputTaxRate.text = stateInfo[row].tax
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return stateInfo[row].name
}