Swift二维字典错误

时间:2015-05-05 15:37:00

标签: swift dictionary multidimensional-array

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

contador_tempo

但使用时:

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

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

2 个答案:

答案 0 :(得分:3)

在字典中查找值会返回一个可选项(因为该键可能不存在。)此次出现:

locale[lang]["create"]

应该是

locale[lang]!["create"]

相反。

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

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

答案 1 :(得分:0)

当您致电locale[lang]时,它会返回一个可选项,因此应将其更改为locale[lang]?["create"]locale[lang]!["create"]