Инициализатор для условного связывания должен иметь необязательный тип, а не '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
}