UITextField 不会以编程方式转换为字符串或采用任何二元运算符 Xcode
UITextField Programmatically won't convert into string or take any binary operators Xcode
在出现这个问题之前,我在文本字段中使用故事板和插座。但是,我发现以编程方式处理我的应用程序更容易。不幸的是,当我开始转换我的应用程序时,例如通过编程方式制作一个文本字段,我 运行 遇到了一些问题,因为我仍然有一些功能,例如为情节提要中的文本字段制作的登录功能。我还是新手 swift,所以任何解决方案都会有所帮助。
我这样声明我的电子邮件文本字段:
var emailTxt: UITextField!
电子邮件文本字段的其他方面在视图加载功能中也是如此:
emailTxt = UITextField(frame: CGRect(x: 77.0, y: 306.0, width: 262, height: 34))
emailTxt.backgroundColor = .white
emailTxt.borderStyle = .roundedRect
emailTxt.keyboardAppearance = .light
emailTxt.keyboardType = .emailAddress
emailTxt.placeholder = "Email"
emailTxt.font = UIFont.systemFont(ofSize: 14.0)
emailTxt.textColor = .systemGreen
emailTxt.tintColor = .systemGreen
emailTxt.delegate = self
self.view.addSubview(emailTxt)
视图外的文本字段函数确实加载:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
}
终于到了我遇到问题的地方。
首先,它说对于 guard 语句必须有一个 else 语句。
然后它说(二元运算符'!='不能应用于'UITextField?'和'String'类型的ope运行ds)然后在else语句中它说(闭包表达式未使用)
最后,在 auth 语句中它给出了错误:无法将类型 'UITextField' 的值转换为预期的参数类型 'String' 同时给电子邮件
添加下划线
这是代码:
guard let email = emailTxt
email != "",
let password = passwordTxt
password != ""
else {
AlertController.showAlert(self, title: "Missing Info", message: "Please fill out all fields")
return
}
Auth.auth().signIn(withEmail: email, password: password, completion: {(user, error) in
guard error == nil else {
AlertController.showAlert(self, title: "Error", message: error!.localizedDescription)
return
}
您缺少 .text
属性。
guard let email = emailTxt.text, !email.isEmpty else {
// show alert
return
}
截至iOS10,也可以简单写成:
guard emailTxt.hasText else {
// show alert
return
}
感谢@LeoDabus 指出这一点
您的错误不言自明,您正在尝试将 UITextField
类型用作 String
。这里需要用到的是UITextField
所遵循的UIKeyInput
协议的.hasText
属性。方法如下:
guard emailTxt.hasText,
passwordTxt.hasText
else {
AlertController.showAlert(self, title: "Missing Info", message: "Please fill out all fields")
return
}
let email = emailTxt.text!
let password = passwordTxt.text!
您可以强制展开 UITextField
的文本,因为它默认为空字符串 ""
。即使它设置为 nil
它 returns 一个空字符串。
在出现这个问题之前,我在文本字段中使用故事板和插座。但是,我发现以编程方式处理我的应用程序更容易。不幸的是,当我开始转换我的应用程序时,例如通过编程方式制作一个文本字段,我 运行 遇到了一些问题,因为我仍然有一些功能,例如为情节提要中的文本字段制作的登录功能。我还是新手 swift,所以任何解决方案都会有所帮助。
我这样声明我的电子邮件文本字段:
var emailTxt: UITextField!
电子邮件文本字段的其他方面在视图加载功能中也是如此:
emailTxt = UITextField(frame: CGRect(x: 77.0, y: 306.0, width: 262, height: 34))
emailTxt.backgroundColor = .white
emailTxt.borderStyle = .roundedRect
emailTxt.keyboardAppearance = .light
emailTxt.keyboardType = .emailAddress
emailTxt.placeholder = "Email"
emailTxt.font = UIFont.systemFont(ofSize: 14.0)
emailTxt.textColor = .systemGreen
emailTxt.tintColor = .systemGreen
emailTxt.delegate = self
self.view.addSubview(emailTxt)
视图外的文本字段函数确实加载:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
}
终于到了我遇到问题的地方。
首先,它说对于 guard 语句必须有一个 else 语句。
然后它说(二元运算符'!='不能应用于'UITextField?'和'String'类型的ope运行ds)然后在else语句中它说(闭包表达式未使用)
最后,在 auth 语句中它给出了错误:无法将类型 'UITextField' 的值转换为预期的参数类型 'String' 同时给电子邮件
添加下划线这是代码:
guard let email = emailTxt
email != "",
let password = passwordTxt
password != ""
else {
AlertController.showAlert(self, title: "Missing Info", message: "Please fill out all fields")
return
}
Auth.auth().signIn(withEmail: email, password: password, completion: {(user, error) in
guard error == nil else {
AlertController.showAlert(self, title: "Error", message: error!.localizedDescription)
return
}
您缺少 .text
属性。
guard let email = emailTxt.text, !email.isEmpty else {
// show alert
return
}
截至iOS10,也可以简单写成:
guard emailTxt.hasText else {
// show alert
return
}
感谢@LeoDabus 指出这一点
您的错误不言自明,您正在尝试将 UITextField
类型用作 String
。这里需要用到的是UITextField
所遵循的UIKeyInput
协议的.hasText
属性。方法如下:
guard emailTxt.hasText,
passwordTxt.hasText
else {
AlertController.showAlert(self, title: "Missing Info", message: "Please fill out all fields")
return
}
let email = emailTxt.text!
let password = passwordTxt.text!
您可以强制展开 UITextField
的文本,因为它默认为空字符串 ""
。即使它设置为 nil
它 returns 一个空字符串。