swift - 条件绑定的初始化程序必须具有可选类型,而不是“Bool”-firebase
问题描述
我刚刚将我的 Firebase pod 更新到了最新版本,然后我立即遇到了一些错误(不是震惊 :))。
我的应用程序将获取传入的动态链接并重定向它们,但我收到错误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
}
在我更新之前我没有这个错误,有人知道出了什么问题吗?
谢谢。
解决方案
使用可选绑定来确定可选是否包含值,如果是,则使该值可用作临时变量。在您的情况下,您不必在非可选 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
}
推荐阅读
- javascript - 箭头函数在三元运算符中不起作用
- asp.net - ASP.NET 我的数据表在 for 循环期间丢失数据
- javascript - 具有反应状态的object.js(无法读取未定义的属性'map')
- html - Vue v-for 指令不呈现正确的 html
- cassandra - 如果在 Apache Cassandra 中,数据中心和机架不直接与物理机架或数据中心相关联,那么如何处理容错?
- laravel - Laravel 类型提示,模型保存时 id 返回 null
- arrays - C:减去数组
- hibernate - 在 Hibernete 多租户环境中,persist() 后无法获取实体 ID
- python - Pandas:将一行字符串分成 4 列;问题:列由逗号、制表符和空格分隔
- ios - Flutter iOS:无法检测到连接的iOS模拟器