Swift and Firebase Error: Cannot convert value of type 'UITextField' to expected argument type 'String'
Swift and Firebase Error: Cannot convert value of type 'UITextField' to expected argument type 'String'
首先,如果我使用了不正确的术语,我深表歉意,因为我对编码非常陌生,而且我正在选择 Swift 作为我的第一语言。
我尝试使用 Swift 和 Firebase 创建的重置密码功能似乎有一些问题,并且我在以下代码行中不断收到错误 "Cannot convert the value of type 'UITextField' to expected argument type '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) 如果在 [=35] 中输入了无效的电子邮件地址,我如何编写 UI 以显示弹出消息以显示 "Please enter a valid email address" =]TextField?
感谢大家花时间阅读我的post,希望你们能帮助解决我的问题!
看起来 email
是一个 UITextField
。
您需要执行 UITextField.text
以获取 UITextField
的文本;对你来说,它是 email.text
。
但是,我会将您的 UITextField
重命名为 emailTextField
而不是 email
。
澄清:您在同一个方法中有 2 个 email
标识符。 if let email = emailTextField
和 func isValidEmail(_ email: String) -> Bool {
。您需要更改其中一项才能正确使用这些数据集。
基本上您尝试将 UITextField
放入 String
字段。似乎 emailTextField
是 UITextField
而不是 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
属性 中获取文本。
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)
}
首先,如果我使用了不正确的术语,我深表歉意,因为我对编码非常陌生,而且我正在选择 Swift 作为我的第一语言。
我尝试使用 Swift 和 Firebase 创建的重置密码功能似乎有一些问题,并且我在以下代码行中不断收到错误 "Cannot convert the value of type 'UITextField' to expected argument type '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) 如果在 [=35] 中输入了无效的电子邮件地址,我如何编写 UI 以显示弹出消息以显示 "Please enter a valid email address" =]TextField?
感谢大家花时间阅读我的post,希望你们能帮助解决我的问题!
看起来 email
是一个 UITextField
。
您需要执行 UITextField.text
以获取 UITextField
的文本;对你来说,它是 email.text
。
但是,我会将您的 UITextField
重命名为 emailTextField
而不是 email
。
澄清:您在同一个方法中有 2 个 email
标识符。 if let email = emailTextField
和 func isValidEmail(_ email: String) -> Bool {
。您需要更改其中一项才能正确使用这些数据集。
基本上您尝试将 UITextField
放入 String
字段。似乎 emailTextField
是 UITextField
而不是 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
属性 中获取文本。
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)
}