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

Я только что обновил свои модули 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 Ответ

0 голосов
/ 27 сентября 2018

Используйте необязательную привязку, чтобы выяснить, содержит ли необязательное значение, и, если да, сделать это значение доступным как временную переменную.В вашем случае вам не нужно использовать необязательную привязку для необязательного 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
}
...