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

时间:2015-05-01 20:22:04

标签: ios iphone xcode swift

ERROR:

  

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

CODE:

  func getApple(appleId: String) {
     var apples = userDefaults.dictionaryForKey("apples_array")
     println(apples[appleId])

1 个答案:

答案 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不再是可选的,它将始终具有下标语法。不需要打包。