我创建了一个这样的二维字典,它编译得很好:
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/