如何将字典加载到UIPickerView

时间:2016-02-27 14:17:36

标签: arrays swift dictionary uipickerview

如何将字典中的数据加载到Swift中的PickerView?

我的词典包含String键(状态)和Double值(税),我想要做的是能够将键设置为titleForRow UIPickerView并在key中显示所选textField的值。

// 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]
}

有任何改进上述代码的建议吗?

2 个答案:

答案 0 :(得分:17)

字典是无序的,因此最好使用数组。 您可以使用一组命名元组将数据保存在一个数组中:

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
}

答案 1 :(得分:1)

您可以使用字典,但字典没有订单。您希望订购数据。如果订单是按字母顺序排列的,那么您可以将字典有效地转换为现在拥有的两个数组。你不希望在每次调用titleForRow时反复这样做,所以你希望数组是永久的。既然如此,你的两个阵列结果是一个非常好的解决方案。您正在以无情的效率获取数据,这正是您想要的。