如何在UIPickerView中引用选定的行?

时间:2019-04-07 16:36:02

标签: swift uipickerview

我在这里收到“意外发现零致命错误”。基本上,我有一个选择器视图,您可以在其中从字典的参考键中选择选项。我想引用这些键来更新带有键内(随机)值的标签

这是我的意思的一个示例

func updateValue {
    desiredValue = myDictionary[pickedKey]
}

“ pickedKey”是当前在选择器视图上选择的内容,它引用字典中的键。这是我遇到问题的pickedKey。如果我在其中对一个随机密钥进行硬编码就可以了,但是显然我希望用户在PIckerView中选择该密钥。

有人知道我为什么会收到零致命错误吗?它也不会让我将pickedKey声明为可选的,它说“不能用索引类型为'String的下标'[String:String]'的值”

更新:这是pickerView的代码

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


        //the selected pick will be stored in pickedKey
        pickedKey = pickerArray[row]

        //the desired value will be the value from the picked key in myDictionary
        desiredValue = myDictionary[pickedKey]!

        foodLabel.text = desiredValue

    }

请记住,pickerArray是myDictionary中的键数组

var pickerArray: Array = Array(myDictionary.keys.sorted())

1 个答案:

答案 0 :(得分:0)

假设您的字典键是string

更新您的密钥排序

var pickerArray: [String] = myDictionary.keys.sorted()

以此替换您的didSelectRow。


var pickedKey: String?

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if 
       let pickedKey = pickerArray[row] as? String,
       let desiredValue = myDictionary[pickedKey] {
           foodLabel.text = desiredValue     
    } else {
        // TODO: Error
    }
}

请确保不要尝试强制使用强制转换,因为如果遇到问题,将会导致崩溃。