在 Swift 2.2 上继续显示错误,但可以成功构建

Keep showing error on Swift 2.2, but can build successfully

升级到Xcode7.3后,Swift2.2.

在代码中,

func handleInfo(info: [NSObject: AnyObject]) {  
    let aps = info["aps"]  
    if let message = aps!["alert"] as? String {  
      .....  
    }  
} 

它将继续显示此行的错误:

if let message = aps!["alert"] as? String

但如果我构建并 运行,它将 运行 成功,没有任何问题。 但是,它在我编码时不断出现,这很烦人。

有办法解决这个问题吗?

尝试清理您的构建文件夹和派生数据。如果这不起作用,解包你的变量或使用可选链接应该抑制警告

if let aps = info["aps"] {
    if let message = aps["alert"] as? String {
        // ...
    }
}

guard let message = info["aps"]?["alert"] as? String else {
    return
}
// ...
func handleInfo(info: [NSObject: AnyObject]) {
    guard let aps = info["aps"] as? [String: AnyObject],
        message = aps["alert"] as? String else {
            return
    }

    // do something with message
}

我终于弄清楚如何摆脱这些错误了。 在Swift 2.2中,它对数据类型应用了更严格的规则。

所以如果Dictionary中有一个key的值也是一个Dictionary,我们就需要指定它的数据类型。

所以最初,我们有代码:

func handleInfo(info: [NSObject: AnyObject]) {  
    let aps = info["aps"]  
    if let message = aps!["alert"] as? String {  
        ..... 
    }
}  

现在 Swift 2.2 将是:

func handleInfo(info: [NSObject: AnyObject]) {  
    let aps = info["aps"] as! [String: AnyObject]
    if let message = aps!["alert"] as? String {  
        ..... 
    }
} 

然后行中显示的错误将消失。