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 一个空字符串。