条件绑定的初始化程序必须具有Optional类型,而不是'Bool'-Firebase

时间:2018-09-27 16:25:30

标签: swift xcode firebase firebase-dynamic-links

我刚刚将我的Firebase吊舱更新到了最新版本,并立即收到一些错误(不是震惊:))。

我的应用将获取传入的动态链接并重定向它们,但在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 个答案:

答案 0 :(得分:1)

使用可选绑定查找可选对象是否包含值,如果包含,则将该值用作临时变量。就您而言,您不必在非可选布尔值上使用可选绑定:

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
}
相关问题