let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as? [String:String]
orch[appleId]
orch[appleId]
行上的错误:
不能下标类型' [String:String]的值?'带索引 类型'字符串'
为什么?
问题#2:
let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as! [String:[String:String]]
orch[appleId] = ["type":"fuji"]
错误:"无法分配此表达式的结果"
答案 0 :(得分:20)
错误是因为您尝试在可选值上使用下标。您正在转换为[String: String]
,但您正在使用投射操作符的条件形式(as?
)。来自文档:
这种形式的运算符将始终返回一个可选值,如果无法进行向下转换,则该值将为nil。这使您可以检查成功的向下转发。
因此orch
的类型为[String: String]?
。要解决这个问题,您需要:
1。如果您确定返回的类型为as!
,请使用[String: String]
:
// You should check to see if a value exists for `orch_array` first.
if let dict: AnyObject = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] {
// Then force downcast.
let orch = dict as! [String: String]
orch[appleId] // No error
}
2。使用可选绑定来检查orch
是否为nil
:
if let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as? [String: String] {
orch[appleId] // No error
}
希望有所帮助。