如何为用户输入设置 UserDefaults 并检索该值以用于异步 Firebase 身份验证功能?

How can I set UserDefaults for user input and retrieve that value to use for an async Firebase Authentication function?

目前我正在为 iOS 使用 Firebase 电子邮件 Link 身份验证,我的第一个身份验证方法 sendsigninlink:toEmail 有效并将电子邮件从用户注册输入发送到电子邮件。但是我目前无法在本地捕获电子邮件输入以在另一个视图控制器中用于另一个异步功能。我尝试在此处的按钮 IBAction 方法中设置电子邮件值。

 @IBAction func EmailValidate(_ sender: Any) {
    let emailvalidation = EmailField.text ?? ""
    if emailvalidation.isValidEmail(){
       let _ = UserDefaults.standard
        let _ = UserDefaults.standard.set(emailvalidation, forKey: "Email")
        return
    } else {
        let invalidEmailAlert = UIAlertController(title: "Invalid Email", message: "Please fill in a valid e-mail.", preferredStyle: .alert)
        let invalidEmailAlertAction = UIAlertAction(title: "OK", style: .default, handler: nil)
        invalidEmailAlert.addAction(invalidEmailAlertAction)
        self.present(invalidEmailAlert, animated: true, completion: nil)}}

isValidEmail() 只是一个用于验证电子邮件文本的正则表达式函数,如果电子邮件有效,UserDefaults 应该捕获该值供我在另一个视图控制器中使用。这是在另一个视图控制器中包含异步方法的函数

func handlePasswordlessSignIn(_ url: URL){
    let emailvalue = UserDefaults.value(forKey: "Email") as? String 
    Auth.auth().signIn(withEmail: emailvalue! , link: link) { (user, error) in
       if error == nil && user != nil {
        if (Auth.auth().currentUser?.isEmailVerified)!{
            print("User verified")
        } else {
            print("User not verified")
            
        }
}
    }
}

当您存储数据时,您正确地使用 UserDefaults.standard 将其存储在共享默认对象中,但是当您尝试检索它时,您错过了 .standard 并且实际上是在调用与获取存储在 UserDefaults 中的数据无关的方法。

要修复,请更改:

let emailvalue = UserDefaults.value(forKey: "Email") as? String 

为此:

let emailvalue = UserDefaults.standard.string(forKey: "Email")