升级到Xcode 7.3后,Swift 2.2。
在代码中,
func handleInfo(info: [NSObject: AnyObject]) {
let aps = info["aps"]
if let message = aps!["alert"] as? String {
.....
}
}
它将继续显示此行的错误:
if let message = aps!["alert"] as? String
但是如果我构建并运行,它将成功运行而没有任何问题。 然而,当我编码时它会不断出现,这非常令人讨厌。
无论如何要解决这个问题?
答案 0 :(得分:1)
func handleInfo(info: [NSObject: AnyObject]) {
guard let aps = info["aps"] as? [String: AnyObject],
message = aps["alert"] as? String else {
return
}
// do something with message
}
答案 1 :(得分:1)
我终于弄清楚如何摆脱这些错误。 在Swift 2.2中,它对数据类型应用了更严格的规则。
因此,如果Dictionary中的键值也是一个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 {
.....
}
}
然后行中显示的错误将消失。
答案 2 :(得分:0)
尝试清理构建文件夹和派生数据。如果这不起作用,展开变量或使用可选链接应该禁止警告
if let aps = info["aps"] {
if let message = aps["alert"] as? String {
// ...
}
}
或
guard let message = info["aps"]?["alert"] as? String else {
return
}
// ...