Swift 3.0 多个选择器 View 无法识别数据源变量

标签 swift switch-statement uipickerview

我的目标是在一个 viewController 上有 3 个 pickerView。每个 pickerView 将根据先前保存的设置列出不同的数据源,这些设置是从数据库中提取的。我已经根据使用如下所示的 switch 语句从数据库中提取的值设置了数据源。

在确实加载的 View 中,连同我设置的选择器的代表,我有:

switch firstValuePulled {
    case "Animals":
        var pickerNumber1 = [["Cat", "Dog", "Bird", Fish],["1","2","3","4","5","6"]]

    case "Sports":
        var pickerNumber1 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]]

    default:
        var pickerNumber1 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]]

    }

switch second ValuePulled {
    case "Animals":
        var pickerNumber2 = [["Cat", "Dog", "Bird", Fish],["1","2","3","4","5","6"]]

    case "Sports":
        var pickerNumber2 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]]

    default:
        var pickerNumber2 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]]

    }

switch thirdValuePulled {
    case "Animals":
        var pickerNumber1 = [["Cat", "Dog", "Bird", Fish],["1","2","3","4","5","6"]]

    case "Sports":
        var pickerNumber1 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]]

    default:
        var pickerNumber1 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]]

    }

至于picker delegates,报错如下“Use of unresolved identifier 'pickerNumber1'”、“Use of unresolved identifier 'pickerNumber2'”等,难道是switch语句没有正确执行,因此delegates没有显示选择器的值?

 func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 2
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    if (pickerView.tag == 1){
        return pickerNumber1[component].count;
    } else if (pickerView.tag == 2){
        return pickerNumber2[component].count;
    } else {
        return pickerNumber3[component].count;
    }

}

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


    if (pickerView.tag == 1){
        return pickerNumber1[component][row]
    } else if (pickerView.tag == 2){
        return pickerNumber2[component][row]
    } else {
        return pickerNumber3[component][row]
    }
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    if (pickerView.tag == 1){
        eventOneValue = pickerNumber1[0][pickerView.selectedRow(inComponent: 0)]
        eventOneNumber = pickerView.selectedRow(inComponent: 1) + 1

        print(eventOneValue)
    } else if (pickerView.tag == 2) {
        eventTwoValue = pickerNumber2[0][pickerView.selectedRow(inComponent: 0)]
        eventTwoNumber = pickerView.selectedRow(inComponent: 1) + 1
        print(eventTwoValue)
    } else {
        eventThreeValue = pickerNumber3[0][pickerView.selectedRow(inComponent: 0)]
        eventThreeNumber = pickerView.selectedRow(inComponent: 1) + 1
        print(eventThreeValue)
    }


}    

最佳答案

这是因为你创造了 pickerNumber1、pickerNumber2 在 switch 语句的范围内局部使用,而 U 在选择器委托(delegate)中使用! 你必须在类里面创建它们并像那样在 Switch 中设置它的值

类你的类名{

var pickerNumber1:Array = []

var pickerNumber2:Array = []

然后 Switch 语句将其用作

switch firstValuePulled { 案例“动物”: pickerNumber1 = [["猫", "狗", "鸟", 鱼],["1","2","3","4","5","6"]]

case "Sports":
   pickerNumber1 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]]

default:
   pickerNumber1 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]]

}

切换第二个 ValuePulled { 案例“动物”: pickerNumber2 = [["猫", "狗", "鸟", 鱼],["1","2","3","4","5","6"]]

case "Sports":
    pickerNumber2 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]]

default:
    pickerNumber2 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]]

}

切换 thirdValuePulled { 案例“动物”: pickerNumber1 = [["猫", "狗", "鸟", 鱼],["1","2","3","4","5","6"]]

case "Sports":
    pickerNumber1 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]]

default:
    pickerNumber1 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]]

}

然后在选择器委托(delegate)中使用它们!

关于Swift 3.0 多个选择器 View 无法识别数据源变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43929278/

相关文章:

casting - 快速子类和类型转换

谁能解释一下 switch、while 和 continue 的相互作用吗?

Android:使用开关盒通过单击按钮传递值

ios - 此实现中的 UIPickerView 文本颜色更改

ios - 如何处理展开函数返回以避免崩溃的应用程序

ios - 在 swift 中发布执行闭包 block

ios - 背景图像垂直拉伸(stretch),但水平重复

ios - 在 Objective-C 上使用 Enum 和 Switch

ios - 如何以编程方式创建多个选择器 View

ios - UIPicker 显示 ?而不是文字