我刚刚将我的 Firebase pod 更新到最新版本,我立即收到了一些错误(不足为奇 :))。
我的应用程序将获取传入的动态链接并重定向它们,但我在 if let linkHandled
处遇到错误
错误说条件绑定(bind)的初始化器必须有可选类型,而不是'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
}
我在更新之前没有遇到这个错误,有人知道哪里出了问题吗?
谢谢。
最佳答案
使用可选绑定(bind)来查明一个可选值是否包含一个值,如果是,则将该值作为一个临时变量可用。在您的情况下,您不必在非可选 bool 上使用可选绑定(bind):
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 在评论中所推荐的,您可以在初始化 linkHandled
时使用 Swift 的尾随闭包语法:
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
}
关于swift - 条件绑定(bind)的初始化程序必须具有可选类型,而不是 'Bool' - firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52541368/