簡體   English   中英

不能下標'[NSObject:AnyObject]類型的值嗎?索引類型為'String'

[英]Cannot subscript a value of type '[NSObject : AnyObject]?' with an index of type 'String'

錯誤:

不能下標'[NSObject:AnyObject]類型的值嗎? 索引類型為'String'

碼:

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

應該:

var apples = userDefaults.dictionaryForKey("apples_array")
println(apples?[appleId])

這里的問題是類型[NSObject : AnyObject]? 暗示一個可選類型,這意味着你試圖調用一個基本上是enum的下標。 當你嘗試這樣做時,沒有聲明下標,所以系統會窒息。

通過添加? 我們說,如果可能的話,解包這個值,然后調用下標。 通過這種方式,系統可以查看類型[NSObject : AnyObject]以獲取下標聲明,一切正常。

你也可以用! 強制解包,但如果apples為零則會崩潰。 另一種可能的方法是:

let apples = userDefaults.dictionaryForKey("apples_array") ?? [:]
println(apples[appleId])

這樣,apples不再是可選的,它將始終具有下標語法。 沒有打包必要。

我認為使用可選綁定要清楚得多,因此只有在打印實際值時才會調用println

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM