繁体   English   中英

Swift 和 Firebase 错误:无法将“UITextField”类型的值转换为预期的参数类型“String”

[英]Swift and Firebase Error: Cannot convert value of type 'UITextField' to expected argument type 'String'

如果我使用不正确的术语,我想开始并道歉,因为我对编码非常陌生,而且我选择 Swift 作为我的第一语言。

我尝试使用 Swift 和 Firebase 创建的重置密码功能似乎有一些问题,并且在以下行中不断收到错误“无法将‘UITextField’类型的值转换为预期的参数类型‘String’”代码:

Auth.auth().sendPasswordReset(withEmail: email)

重置密码的重置调用是以下 IB 操作的一部分,它根据输入到 UITextField 的电子邮件重置密码,并检查以确保它是有效的电子邮件地址:

@IBAction func resetButton(_ sender: Any) {
    if let email = emailTextField {
        Auth.auth().sendPasswordReset(withEmail: email)
            func isValidEmail(_ email: String) -> Bool {
                let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"

                let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
                return emailPred.evaluate(with: email)
            }
        }
    }

有两个问题希望大家帮忙解决:

1) 如何解决这个我无法解决的错误?

2) 如果在 UITextField 中输入了无效的电子邮件地址,我如何编码 UI 以显示弹出消息以显示“请输入有效的电子邮件地址”?

感谢大家花时间阅读我的帖子,我希望你们能够帮助我解决问题!

看起来email是一个UITextField

你需要做的UITextField.text获得的文本UITextField ; 对你来说,它是email.text

但是,我会将您的UITextField重命名为emailTextField而不是email

说明:您在同一方法中有 2 个email标识符。 if let email = emailTextFieldfunc isValidEmail(_ email: String) -> Bool { . 您需要更改其中之一,以便能够适当地处理这些数据集。

基本上,您尝试将UITextField放入String字段。 似乎emailTextFieldUITextField而不是String

代码实际上是什么

@IBAction func resetButton(_ sender: Any) {
    if let email = emailTextField.text {
       if isValidEmail(email) {
           Auth.auth().sendPasswordReset(withEmail: email)
          } else {
             // Invalid email
        }
     }
 }

func isValidEmail(_ email: String) -> Bool {
      let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"

      let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
      return emailPred.evaluate(with: email)
 }

首先,函数isValidEmail没有在IBAction中执行。 无论函数在哪里声明,您都必须显式调用它。

错误很明显: email / emailTextField是文本字段而不是字符串,您必须从其text属性中获取text

resetButton调用isValidEmail ,成功时发送字符串,失败时显示错误消息。

@IBAction func resetButton(_ sender: Any) {
    guard let email = emailTextField.text else { return }            
    if isValidEmail(email) {
        Auth.auth().sendPasswordReset(withEmail: email)
    } else {
        let alertController = UIAlertController(title: "Email validation failed", message: "Please enter a valid email address", preferredStyle: .alert)
        let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
        alertController.addAction(okAction)
        self.present(alertController, animated: true, completion: nil)
    }
}


func isValidEmail(_ email: String) -> Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
    let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    return emailPred.evaluate(with: email)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM