ERROR:
不能下标'[NSObject:AnyObject]类型的值吗?与 'String'类型的索引
CODE:
func getApple(appleId: String) {
var apples = userDefaults.dictionaryForKey("apples_array")
println(apples[appleId])
答案 0 :(得分:13)
应该是:
var apples = userDefaults.dictionaryForKey("apples_array")
println(apples?[appleId])
这里的问题是类型[NSObject : AnyObject]?
意味着一个可选类型,这意味着你试图调用一个基本上是enum的下标。当你尝试这样做时,没有声明下标,所以系统会窒息。
通过添加我们所说的?
,如果可能,解包该值,然后调用下标。通过这种方式,系统可以查看类型[NSObject : AnyObject]
以查找下标声明,一切正常。
您也可以使用!
强制解包,但如果apples
为零,则会崩溃。另一种可能的方法是:
let apples = userDefaults.dictionaryForKey("apples_array") ?? [:]
println(apples[appleId])
这样,apple不再是可选的,它将始终具有下标语法。不需要打包。