Swift二维字典错误

标签 swift dictionary multidimensional-array

我创建了一个这样的二维字典,它编译得很好:

var locale : [String : [String : String]] =
    ["en" : ["create" : "Create", "cancel" : "Cancel"],
     "fr" : ["create" : "Creer", "cancel" : "Annuler"]]

但是在使用的时候:

var lang = NSUserDefaults.standardUserDefaults().objectForKey("MyLanguage") as! String
let createButton = UIBarButtonItem(title: locale[lang]["create"],
            style: UIBarButtonItemStyle.Plain, target: self, action: "createAction:")
self.navigationItem.rightBarButtonItem = createButton

我得到以下编译错误:

Cannot subscript a value of type '[String : String]?' with an index of type 'String'

我现在将使用替代解决方案,但我不理解错误并且没有找到二维字典示例。二维字典的正确方法是什么?

最佳答案

在字典中查找一个值返回一个可选的(因为那个键可能不存在。)这个表达式:

locale[lang]["create"]

应该是

locale[lang]!["create"]

相反。

请注意,如果您的字典中没有当前语言的条目,该代码将崩溃。使用可选绑定(bind)会更安全:

if let createButtonTitle = locale[lang]?["create"]
{
  let createButton = UIBarButtonItem(
    title: createButtonTitle,
    style: UIBarButtonItemStyle.Plain, 
    target: self, 
    action: "createAction:")
  self.navigationItem.rightBarButtonItem = createButton
}

关于Swift二维字典错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057373/

相关文章:

c++ - 当我试图在 C++ 中访问这个数组 (2d) 时出了什么问题

c++ - 实例化后更改 multi_array_ref 数据 block

ios - 后台模式下的 HKObserverQuery

c++ - 模板 C++:如何访问 std::map 和 std::set 的迭代器值?

python - 如何将字符串值格式化为实际字符串

python - 使用 DictReader 计数

java - java中如何从二维数组中删除元素

ios - 如何为按钮点击编写单元测试?

swift - 如何在 iOS 中从设备到设备发送 Firebase 推送通知

ios - 如何在 Swift 中创建一个空数组?