如何将字典加载到UIPickerView中

如何将字典加载到UIPickerView中

问题描述:

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

我有一个String键(美国)和Double值(税),我想要做的是能设置键作为UIPickerView的titleForRow和显示所选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] 
} 

任何建议,以改善上述代码?

词典是无序的,所以你最好使用数组。 您可以使用一个名为元组的阵列,让您的数据集中在一个阵列:

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 
} 
+0

非常感谢您的建议,我喜欢这种方法。 –

+0

@ vacawama快速的问题,我想封装在一个类中的数组,但我不知道如何返回元组数组。私人让stateInfo:[(name:String,tax:Double)] = [ (“Alabama”,6.000), (“Illinois”,7.000), (“Oregon”,8.000), ( “威斯康星”,9.000) ] VAR税:阵列 - >(名称:字符串,年龄:智力){ 获得{ 回报将stateInfo } } }'我如何从一个类返回数组? –

+1

不应该是'var tax:[(name:String,tax:Double)] {get {return stateInfo}}'? – vacawama

您可以使用字典,但字典没有顺序。你想要订购你的数据。如果顺序是按字母顺序排列的,则可以将字典有效地转换为您现在具有的两个数组。您不希望在每次拨打titleForRow时都这样做,因此您希望阵列永久保存。如此,你的两个阵列变成了一个非常好的解决方案。您以无情的效率获取数据,这正是您想要的。

+0

酷,我想我不知道,因为这两个阵列不互相关联,如果一个由于某种原因改变了这种关系,但我想这只是一个牢记这一点的问题,如果对一个方面做了改变,那么这两方面都需要完成。非常感谢。你的书的大风扇:)。 –

+1

谢谢。那么,你可以保留一个单一的状态数组对。这将解决更新问题。 Vacawama完全正确。对可以是元组或数组,甚至可以是自定义结构。 – matt

+0

非常感谢您的帮助。 –