Продолжайте показывать ошибку на Swift 2.2, но можете успешно построить
После того, как я обновился до 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
Но если я собираю и запускаю, он будет работать без проблем. Тем не менее, это довольно раздражает, что он продолжает появляться, когда я пишу код.
В любом случае, чтобы это исправить?
3 ответа
Я наконец выясняю, как избавиться от этих ошибок. В 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 {
.....
}
}
Тогда ошибки, отображаемые в строках, исчезнут.
func handleInfo(info: [NSObject: AnyObject]) {
guard let aps = info["aps"] as? [String: AnyObject],
message = aps["alert"] as? String else {
return
}
// do something with message
}
Попробуйте очистить папку сборки и производные данные. Если это не сработает, распаковка ваших переменных или использование необязательной цепочки должно подавить предупреждение
if let aps = info["aps"] {
if let message = aps["alert"] as? String {
// ...
}
}
или же
guard let message = info["aps"]?["alert"] as? String else {
return
}
// ...