来自元组数组的 UIPicker

Posted

技术标签:

【中文标题】来自元组数组的 UIPicker【英文标题】:UIPicker from Array of Tuples 【发布时间】:2016-09-05 14:13:51 【问题描述】:

如何加载带有元组数组的 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 Ofs 示例中的默认值。

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)"

【问题讨论】:

你不使用参数row也不是component 天哪,抱歉有点累。看代码,你会看到for循环只保存数组的最后一个数据。 【参考方案1】:

这就是你应该如何使用你的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)"

【讨论】:

这是一个简单的数组,我的是一个array of tuples @fs_tigre 这是在你的帖子中声明的[(String, Double)]数组 @fs_tigre 请注意,您使用默认占位符 01 访问元组 current 的元素 我的错,这正是你这样做的方式。另外,感谢您指出占位符,我最终命名了我的元组以使其更具可读性(请参阅我编辑的问题)。非常感谢您的帮助。【参考方案2】:

您有一个与for loop 理解有关的问题。

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

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

循环结束后,您只能看到案例 2 中最后一个元素的最后一个值。

【讨论】:

我知道 for 循环是如何工作的,但我不确定如何使用它来迭代 array of tuples。谢谢 您只需要返回正确的项目即可。没问题好问题。

以上是关于来自元组数组的 UIPicker的主要内容,如果未能解决你的问题,请参考以下文章

返回多个数组中相同位置的项目

IOS:从 uipicker 的核心数据中获取数组

NumPy来自现有数据的数组

Julia:扁平化数组/元组数组

从 UIPicker 进行选择时尝试显示图像和标签

从 NSArray 使用 UIPicker 获取 titleForRow - Swift