首页 > 解决方案 > 条件绑定的初始化程序必须具有可选类型,而不是“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
}

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

谢谢。

标签: swiftxcodefirebasefirebase-dynamic-links

解决方案


使用可选绑定来确定可选是否包含值,如果是,则使该值可用作临时变量。在您的情况下,您不必在非可选 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
}

推荐阅读