【问题标题】:Initializer for conditional binding must have Optional type, not 'Bool' - firebase条件绑定的初始化程序必须具有可选类型,而不是“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
}

在更新之前我没有出现此错误,有人知道出了什么问题吗?

谢谢。

【问题讨论】:

    标签: swift xcode firebase firebase-dynamic-links


    【解决方案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) { ... }
    • 我在更新的答案中提到了您的建议。
    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 2017-01-22
    • 2018-03-25
    • 2016-01-08
    • 2017-04-08
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多