![](/img/trans.png)
[英]Cannot subscript a value of type '[NSObject : AnyObject]' with an index of type '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.