2016-02-27 90 views
3

如何將字典中的數據加載到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] 
} 

任何建議,以改善上述代碼?

回答

11

詞典是無序的,所以你最好使用數組。 您可以使用一個名爲元組的陣列,讓您的數據集中在一個陣列:

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

1

您可以使用字典,但字典沒有順序。你想要訂購你的數據。如果順序是按字母順序排列的,則可以將字典有效地轉換爲您現在具有的兩個數組。您不希望在每次撥打titleForRow時都這樣做,因此您希望陣列永久保存。如此,你的兩個陣列變成了一個非常好的解決方案。您以無情的效率獲取數據,這正是您想要的。

+0

酷,我想我不知道,因爲這兩個陣列不互相關聯,如果一個由於某種原因改變了這種關係,但我想這只是一個牢記這一點的問題,如果對一個方面做了改變,那麼這兩方面都需要完成。非常感謝。你的書的大風扇:)。 –

+1

謝謝。那麼,你可以保留一個單一的狀態數組對。這將解決更新問題。 Vacawama完全正確。對可以是元組或數組,甚至可以是自定義結構。 – matt

+0

非常感謝您的幫助。 –

相關問題