#ios #swift #swift3 #ios10
#iOS #swift #swift3 #ios10
Вопрос:
Я получил эту ошибку в swift3:
Cannot convert value of type [AnyHashable : Any] to type NSDictionary in coercion.
Мой код:
func downloadProgress(notification:NSNotification){
if let userInfo = notification.userInfo as NSDictionary
{
print(userInfo) // [AnyHashable("progressPercentage"): 0.82530790852915281]
if let progressValue = userInfo["progressPercentage"] as? Float {
if progressValue > 0.01{
}
}
}
}
Фактическое значение userInfo — это всего ["progressPercentage": 0.82530790852915281]
лишь напечатанное как [AnyHashable("progressPercentage"): 0.82530790852915281]
и не удовлетворяющее if
условию.
Редактировать:
Не повезло notification.userInfo as? [AnyHashable: Any]
, но теперь работает для notification.userInfo as? [String: AnyObject]
и notification.userInfo as? [String: Any]
Комментарии:
1. Как насчет
notification.userInfo as? [String: AnyObject]
?2. Зачем вам вообще нужно его использовать?
3. @ozgur, приведение к
[String: AnyObject]
работам сейчас4. @MuruganandhamK — вы видели мой ответ, я четко упомянул об этом, если вы знаете, какой тип используется
[String: Any]
для swift3, если вы используете[String: AnyObject]
его для swift25. @Anbu.Karthik, да, я использовал
[String: Any]
Ответ №1:
введите converson
используйте
func downloadProgress(notification:NSNotification){
if let userInfo = notification.userInfo as [String: Any] // or use if you know the type [AnyHashable : Any]
{
print(userInfo)
if let progressValue = userInfo["progressPercentage"] as? Float {
if progressValue > 0.01{
}
}
}
}
для получения дополнительной информации см. Справочные документы по API
Комментарии:
1. Привет, @Anbu.Karthik,
[AnyHashable : Any]
здесь не работает.[String: Any]
и[String: AnyObject]
теперь поддерживают приведение типов2. Принято ваше 🙂
3. @MuruganandhamK — не так ,
Ответ №2:
Пожалуйста, используйте новый класс Notification
вместо NSNotification
.
У меня нет с собой моего Mac, но это должно решить проблему.
Это изменение применяется автоматически, если вы используете встроенный инструмент преобразования Xcode Swift.
Комментарии:
1. привет @Teejay, проблема не
Notification
в том, или сNSNotification
. Все о приведении типов2. Хорошо, но, вероятно, если вы используете инструмент преобразования, он также преобразует NSDictionary в правильную
[AnyHashable : Any]
конструкцию.3. да, я понял. Спасибо