swift - 条件绑定(bind)的初始化程序必须具有可选类型,而不是 'Bool' - firebase

标签 swift xcode firebase firebase-dynamic-links

我刚刚将我的 Firebase pod 更新到最新版本,我立即收到了一些错误(不足为奇 :))。

我的应用程序将获取传入的动态链接并重定向它们,但我在 if let linkHandled 处遇到错误

错误说条件绑定(bind)的初始化器必须有可选类型,而不是'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
}

我在更新之前没有遇到这个错误,有人知道哪里出了问题吗?

谢谢。

最佳答案

使用可选绑定(bind)来查明一个可选值是否包含一个值,如果是,则将该值作为一个临时变量可用。在您的情况下,您不必在非可选 bool 上使用可选绑定(bind):

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
}

关于swift - 条件绑定(bind)的初始化程序必须具有可选类型,而不是 'Bool' - firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52541368/

相关文章:

node.js - 无法读取未定义的属性 'code',解码 Firebase ID token 失败

ios - WKImage 总是返回 nil

swift - Dispatch Group 命令在代码中放在哪里?

ios - 有没有办法在构建阶段自动将自定义值写入包的 .plist?

xcode - 在 Xcode 中同时添加 .h 和 .m 文件

swift - Firebase iOS annotateImage 函数返回 'Unexpected token o in JSON at position 1'

android - Firebase 云消息传递通知 key 名称

ios - 如何使用 CoreData 构建复杂查询?

ios - 如何为所有iDevice设置背景图片?

swift - 无法推断通用参数 'T'/无法显式特化通用函数