UITextField程序上不会转换为字符串或采用任何二进制操作符Xcode。

问题描述 投票:0回答:1

在出现这个问题之前,我一直使用故事板和网点来处理文本字段。然而,我发现用编程的方式来处理我的应用程序更容易。 不幸的是,当我开始转换我的应用程序时,例如通过编程制作文本字段,我遇到了一些问题,因为我仍然有一些功能,例如我的登录功能,是为故事板的文本字段制作的。 我还是新的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()
}

最后是我遇到问题的地方

首先,它说对于守护语句必须有一个 else 语句。

然后,它说(二进制操作符'!='不能应用于类型为'UITextField?'和'String'的操作数)然后在 else 语句中,它说(closure表达式未被使用)。

最后,在 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
        }
ios swift uitextfield xcode11
1个回答
0
投票

你的错误是不言自明的,你正在尝试使用的是 UITextField 类型为 String. 这里你需要使用的是 .hasText 的财产 UIKeyInput 该协议 UITextField 符合。下面是如何做到的。

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 它返回的是一个空字符串。


0
投票

你缺少了 .text 财产。

guard let email = emailTxt.text, !email.isEmpty else {
    // show alert
    return
}

截至 iOS 10,它也可以简单地写成。

guard emailTxt.hasText else {
    // show alert
    return
}

归功于@LeoDabus指出了这一点。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.