let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as? [String:String]
orch[appleId]
Run Code Online (Sandbox Code Playgroud)
错误就orch[appleId]行了:
不能下标'[String:String]类型的值?' 索引类型为'String'
为什么?
问题2:
let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as! [String:[String:String]]
orch[appleId] = ["type":"fuji"]
Run Code Online (Sandbox Code Playgroud)
错误:"无法分配此表达式的结果"
ABa*_*ith 22
该错误是因为您尝试在可选值上使用下标.你正在投射,[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
}
Run Code Online (Sandbox Code Playgroud)
2.使用可选的结合是否orch是nil:
if let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as? [String: String] {
orch[appleId] // No error
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
27230 次 |
| 最近记录: |