Инициализатор для условного связывания должен иметь необязательный тип, а не 'Bool' - firebase

Я только что обновил свои стручки Firebase до последней версии, и сразу же я получаю некоторые ошибки (не шок:)) .

Мое приложение будет принимать входящие динамические ссылки и перенаправлять их, но я получаю сообщение об ошибке в if let linkHandled

Ошибка говорит Initializer for conditional binding must have Optional type, not 'Bool'

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if let incomingUrl = userActivity.webpageURL {
        if let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingUrl, completion: { (dynamicLink, _) in
            if let dynamicLink = dynamicLink, let _ = dynamicLink.url {
                self.handleIncomingDynamicLink(dynamicLink: dynamicLink)
            }
        }) {
            return linkHandled
        }
    }
    return false
}

У меня не было этой ошибки до того, как я обновился, кто-нибудь получил представление о том, что не так?

Благодарю.

1 ответ

Решение

Используйте необязательную привязку, чтобы выяснить, содержит ли необязательное значение, и, если да, сделать это значение доступным как временную переменную. В вашем случае вам не нужно использовать необязательную привязку для необязательного bool:

let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingUrl, completion: { (dynamicLink, _) in
    if let dynamicLink = dynamicLink, let _ = dynamicLink.url {
        self.handleIncomingDynamicLink(dynamicLink: dynamicLink)
    }
})

if linkHandled {
    return linkHandled
}

Или, более кратко, как рекомендует @LeoDabus в комментариях, вы можете использовать синтаксис трейлинг-закрытия Swift при инициализации linkHandled:

let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingUrl) { (dynamicLink, _) in
    if let dynamicLink = dynamicLink, let _ = dynamicLink.url {
        self.handleIncomingDynamicLink(dynamicLink: dynamicLink)
    }
}

Вся ваша функция будет выглядеть так:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if let incomingUrl = userActivity.webpageURL {

        let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingUrl, completion: { (dynamicLink, _) in
            if let dynamicLink = dynamicLink, let _ = dynamicLink.url {
                self.handleIncomingDynamicLink(dynamicLink: dynamicLink)
            }
        })

        if linkHandled {
            return linkHandled
        }
    }
    return false
}
Другие вопросы по тегам