【问题标题】:SceneDelegate - Result of call to 'flatMap' is unusedSceneDelegate - 调用“flatMap”的结果未使用
【发布时间】:2020-03-19 23:51:23
【问题描述】:

大家好,我正在使用 Firebase 身份验证,我允许用户使用他的电子邮件和发送到他的电子邮件的验证链接登录.. .

一切正常,但使用 iOS 13 我必须使用 SceneDelegate 而不是 AppDelegate 并且在函数 scene method (_ scene: UIScene, continue userActivity: NSUserActivity)我收到一个警告,警告我我没有调用结果flatMap 调用。

谁能帮我解决这个警报?

调用“flatMap”的结果未使用

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
     userActivity.webpageURL.flatMap(handlePasswordlessSignIn)
}

func handlePasswordlessSignIn(withURL: URL) -> Bool {
    let link = withURL.absoluteString

    if Auth.auth().isSignIn(withEmailLink: link) {

        guard let email = UserDefaults.standard.value(forKey: FirebaseUserAuthWithLink.email) as? String else {
            print("L'email utilizzata per accedere non esiste")
            return true
        }

        Auth.auth().signIn(withEmail: email, link: link) { (user, error) in
            if let error = error {
                print(error.localizedDescription)
                return
            }

            guard let user = user else {
                print(" Authentication con Link Fallita")
                return
            }
            let uid = user.user.uid
            print("Autenticazione Riuscita")

            let data = [
                "email" : email
            ] as [String : Any]

            Firestore.firestore().collection("Users").document(uid).setData(data) { (error) in
                if let error = error {
                    print(error.localizedDescription)
                    return
                }
            }
        }
        return true
    }
    return false
}

按照实现教程,队列的所有示例都参考 AppDelegate 而我尝试更新在 SceneDelegate 上工作的代码

【问题讨论】:

  • 那行代码打算做什么?
  • @matt 我更新了我的代码...当用户收到电子邮件中的链接时,我调用 Firebase 以通过电子邮件完成身份验证流程...当他返回应用程序时,他登录在
  • @matt 我做错了吗?
  • 很好,但你还没有回答我的问题。如果您只想打电话给handlePasswordlessSignIn,那么打电话给flatMap 的目的是什么?它只是应该是一种优雅的方式来处理userActivity.webpageURL 是一个可选的事实。现在我们遇到了一个新问题:声明handlePasswordlessSignIn 返回一个Bool 的目的是什么?您正在丢弃 flatMap 的结果 并且 您正在丢弃 handlePasswordlessSignIn 的结果。
  • @matt 问题是从 appDelegate 到 SceneDelegate 我无法找到此代码的更新...passwordlessSignIn 在 firebase 中验证我的用户的身份验证因此我该如何制作这部分“对”而不使用func scene (_ scene: UIScene, continue userActivity: NSUserActivity)?

标签: ios swift firebase appdelegate uiscenedelegate


【解决方案1】:

你可以这样重写:

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
    if let url = userActivity.webpageURL {
        handlePasswordlessSignIn(withURL:url)
    }
}

但是你会仍然收到投诉,因为现在你忽略了handlePasswordlessSignIn的结果!您可以通过将handlePasswordlessSignIn 指定为@discardableResult 来解决这个问题:

@discardableResult
func handlePasswordlessSignIn( //...

【讨论】:

  • 就是这样!! @discardableResult 非常有帮助!非常感谢你真的很友善
  • @kAiN 虽然这个答案是正确的,但它是解决问题中代码核心问题的一种解决方法。这个Auth.auth().signIn(withEmail: 是一个异步函数,这意味着闭包之后的任何代码,例如return true 将在闭包内的代码之前执行之前。在这种情况下,您的函数每次都会返回 true。这个答案显示了如何忽略返回,但你真的不应该首先这样做。正确的流程将在闭包内,一旦用户通过身份验证,您应该继续下一步;例如例如显示下一个 viewController。
  • @Jay 我完全同意。这就是为什么我问为什么 OP 从一个执行异步网络的函数返回一个值。但我无法得到答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2017-03-02
  • 2018-06-22
  • 1970-01-01
相关资源
最近更新 更多