不能下标'inout [AnyHashable:Any]类型的值

时间:2017-09-20 02:43:01

标签: swift

抱歉超级noobie在这里试图编译这个,这是我试图解决的最后一个错误。

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

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

2 个答案:

答案 0 :(得分: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))

}

答案 1 :(得分:0)

感谢大家的帮助和反馈!

这似乎适用于目前为止

如果让number = localNotification.userInfo?[“pokemonId”]为? NSNumber,让optionalString0 = formatter.string(from:number)为?字符串{

    imagen.setImage(UIImage(named: optionalString0))

}