let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as? [String:String]
orch[appleId]
在orch[appleId]
行上出现以下错误:
不能下标“String:String?”类型的值?具有“String”类型的索引
为什么?
问题2:
let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as! [String:[String:String]]
orch[appleId] = ["type":"fuji"]
以下错误:“无法分配此表达式的结果”
发布于 2015-05-03 23:11:37
此错误是因为您试图对可选值使用下标。您正在转换到[String: String]
,但您使用的是强制转换操作符(as?
)的条件形式。从文件中:
这种形式的运算符将始终返回一个可选的值,如果不可能下行,则该值将为零。这使您能够检查是否有成功的下播。
因此,orch
是[String: String]?
类型。要解决这个问题,您需要:
1.如果您确实知道返回的类型是[String: String]
,则使用as!
:
// 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
}
希望这能有所帮助。
https://stackoverflow.com/questions/30020362
复制相似问题