2017-09-20 87 views
0

對不起,這裏試圖編譯這個超級noobie,這是我想解決的最後一個錯誤。不能下標值類型'inout [AnyHashable:Any

let optionalString0 = formatter.stringFromNumber(NSNumber(localNotification.userInfo!["pokemonId"]as! Int)) 

    if optionalString0 != nil { 
     imagen.setImage(UIImage(named: optionalString0!)) 
+0

請提供更多有問題的代碼和錯誤的全文。 – chb

+0

請接受答案,如果它解決了你的問題 – 3stud1ant3

回答

0

我認爲錯誤是由於這樣的說法:

NSNumber(localNotification.userInfo!["pokemonId"]as! Int) 

我在操場上試過這種重現錯誤:

var dict = [1: "10", "t": 100] as [AnyHashable : Any] 

func foo(paramDict: inout [AnyHashable : Any]) { 


     print(NSNumber(paramDict["t"] as! Int)) //getting the same error on this line 
} 

foo(paramDict: &dict) 

在上面的代碼中,我得到print同樣的錯誤聲明

我通過修改上述代碼解決了這個問題:

var dict = [1: "10", "t": 100] as [AnyHashable : Any] 

func foo(paramDict: inout [AnyHashable : Any]) { 

     if let number = paramDict["t"] as? NSNumber { 
       print(number) 
     } 

} 


foo(paramDict: &dict) 

所以你的情況修改您的代碼是這樣的:

if let number = localNotification.userInfo?["pokemonId"] as? NSNumber { 
    let optionalString0 = formatter.string(from: number) 

    if optionalString0 != nil { 
     imagen.setImage(UIImage(named: optionalString0!)) 
    } 

} 

注意:您可以修改上面這樣的代碼:(它沒有涉及到問題的錯誤,但只是以不同的方式寫上面的代碼(可能會更好))

if let number = localNotification.userInfo?["pokemonId"] as? NSNumber, let optionalString0 = formatter.string(from: number) as? String { 

     imagen.setImage(UIImage(named: optionalString0)) 

} 
+0

'if let number = localNotification.userInfo![「pokemonId」] as? NSNumber {'如果userInfo爲零,會崩潰。你爲什麼不在那裏使用可選的鏈接? '如果讓number = localNotification.userInfo?[「pokemonId」]爲? NSNumber {' –

+1

@LeoDabus更新,感謝您的輸入 – 3stud1ant3

+1

是Swift 2嗎?它看起來像Swift 3. AnyHashable僅在Swift 3中可用。'formatter.string(from:aNSNumber)'或'formatter.string(for:anAny)' –

0

感謝所有的幫助和反饋!

這看起來像它的工作原理迄今

如果讓數= localNotification.userInfo?[ 「pokemonId」]作爲? NSNumber,讓optionalString0 = formatter.string(from:number)as?字符串{

imagen.setImage(UIImage(named: optionalString0)) 

}

相關問題