来自元组数组的 UIPicker

UIPicker from Array of Tuples

如何加载带有元组数组的 UIPickerView?

使用以下代码,我在 UIPickerView 中只看到 Oregon: 9.0

let myArrayTuple: [(String, Double)] = [("Illinois", 7.0), ("Wisconsin", 8.0), ("Oregon" ,9.0)]

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {    
    var stateName:String?
    var stateTax:Double?

    for (name , tax) in myArrayTuple{
         stateName = name
         stateTax = tax
    }
    return stateName! +  ": \(stateTax!)"
}

编辑:这是您的操作方法:请参阅 Shadow Of

的回答

在下面的示例中,我使用命名元组而不是 Shadow Of 示例中的默认值。

let myArrayTuple: [(name:String, tax:Double)] = [("Illinois", 7.0), ("Wisconsin", 8.0), ("Oregon" ,9.0)]

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {    

    let stateName = myArrayTuple[row]
    return stateName.name +  ": \(stateName.tax)"
}

您遇到了与for loop理解有关的问题。

 for (name , tax) in myArrayTuple{
      stateName = name
      stateTax = tax
 }

你从 0 元素到 2 并且在每次迭代中你设置新值而不是 return 它。

循环结束后,您只会看到情况 2 中最后一个元素的最后一个值。

这就是你应该如何使用你的 UIPickerView,我猜:

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return myArrayTuple.count
}

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    let current = myArrayTuple[row]
    return current.0 + ": \(current.1)"
}