不能下标'[NSObject:AnyObject]类型的值吗?索引类型为'String'

hun*_*erp 9 iphone xcode ios swift

错误:

不能下标'[NSObject:AnyObject]类型的值吗?索引类型为'String'

码:

  func getApple(appleId: String) {
     var apples = userDefaults.dictionaryForKey("apples_array")
     println(apples[appleId])
Run Code Online (Sandbox Code Playgroud)

Log*_*gan 13

应该:

var apples = userDefaults.dictionaryForKey("apples_array")
println(apples?[appleId])
Run Code Online (Sandbox Code Playgroud)

这里的问题是类型[NSObject : AnyObject]?意味着一个可选类型,这意味着你试图调用一个基本上是enum的下标.当你尝试这样做时,没有声明下标,所以系统会窒息.

通过添加?我们所说的,如果可能,解包该值,然后调用下标.通过这种方式,系统可以查看[NSObject : AnyObject]下标声明的类型,一切正常.

您也可以使用!强制解包,但如果apples为零则会崩溃.另一种可能的方法是:

let apples = userDefaults.dictionaryForKey("apples_array") ?? [:]
println(apples[appleId])
Run Code Online (Sandbox Code Playgroud)

这样,apples不再是可选的,它将始终具有下标语法.没有打包必要.