条件绑定的初始化程序必须具有可选类型,而不是“Bool”-firebase
Posted
技术标签:
【中文标题】条件绑定的初始化程序必须具有可选类型,而不是“Bool”-firebase【英文标题】:Initializer for conditional binding must have Optional type, not 'Bool' - firebase 【发布时间】:2018-09-27 16:25:29 【问题描述】:我刚刚将我的 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
在更新之前我没有出现此错误,有人知道出了什么问题吗?
谢谢。
【问题讨论】:
【参考方案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
或者更简洁地说,根据 cmets 中 @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 的尾随闭包语法并省略最后一个参数(完成)。handleUniversalLink(incomingUrl) ...
我在更新的答案中提到了您的建议。以上是关于条件绑定的初始化程序必须具有可选类型,而不是“Bool”-firebase的主要内容,如果未能解决你的问题,请参考以下文章
如何修复条件绑定的初始化程序必须具有可选类型,而不是“字符串”? [复制]
条件绑定的初始化程序必须具有可选类型,而不是“UIView”
条件绑定的初始化程序必须具有可选类型,而不是“AVAudioInputNode”
条件绑定的初始化程序必须具有可选类型,而不是“UIView”