2017-02-11 9 views
0

Я смущен, потому что передаю параметр Notification между двумя ViewControllers. Я не пытаться использовать параметр, передаваемый в качестве Bool идти вперед:Параметр из словаря уведомлений Любой или Bool?

func doWhenParameterSelected(notification: Notification) { 

    let status = notification.userInfo!["key0"]! 
    print(type(of:status)) //is "Bool" in Console 
    print(status) // value is "true" or "false" in Console 

    if status {... // error occurs "'Any' is not convertible to 'Bool'" 

Я всегда получаю сообщение об ошибке 'Any' is not convertible to 'Bool'.

Итак, почему statusAny, когда type(of: status)) is Bool in Console. Если Any типа, как я могу использовать status как Bool типа?

Спасибо!

ответ

1

Параметр userInfo определяется как [AnyHashable : Any] (неопределенный Dictionary) независимо от того, что вы посылаете.

Если вы ответственны за уведомление, а параметр userInfo никогда не меняется только вынуждены бросить значение Bool

let status = notification.userInfo!["key0"] as! Bool 
1

Попробуйте бросить его как Bool:

let status = notification.userInfo!["key0"] as? Bool ?? false 
+0

вы могли бы сделать это в одном step'if пусть статус = notification.userInfo! [ "Key0"], как? Bool ' – Russell

+0

Да, вопрос обновлен и спасибо за комментарий. @Рассел –

1

Вы должны привести его к BOOL, прежде чем использовать его в качестве условия.

func doWhenParameterSelected(notification: Notification) { 

    guard notification.userInfo?["key0"] as? Bool ?? false else { 
     // could not cast to Bool or it was false 
     return 
    } 

    // ... 
} 

ИЛИ

func doWhenParameterSelected(notification: Notification) { 

    if notification.userInfo?["key0"] as? Bool ?? false { 
     // ... 
    } else { 
     // could not cast to Bool or it was false 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^