Swift If语句中的错误

时间:2019-05-14 22:03:28

标签: swift debugging if-statement uitextfield

我设置了4个UITextField和一个UIButton。当用户提供用户名,电子邮件,密码等数据时,这就像一个注册页面。因此,仅在所有UItextfields不为空的情况下,注册按钮才启用,以便用户可以在内部轻按并转到下一个UIView。一切工作正常,但我注意到一个小错误正在进入我的最后XD。

如果用户使用所需的全部n个信息填充所有UItextField,但由于某种原因将其中的Backspace填充到其中一个,直到该字段为空,然后点按注册按钮,即使字段为空,注册也将成功。请问我已经花了将近一周的时间来解决这个问题。

我设置UIbotton的方式:

private let registerButton : UIButton = {
    let button = UIButton(type: .system)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setTitle("Registrar", for: .normal)
    button.backgroundColor = UIColor.blue
    button.layer.cornerRadius = 5
    button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 14)
    button.setTitleColor(.black, for: .normal)
    button.addTarget(self, action: #selector(handleSignUp), for: .touchUpInside)
    button.isEnabled = true
    return button
}()

负责验证用户是否已填写所有字段的分组代码。

@objc private func handleSignUp () {
    let userName = userNameTexField.text
    let email = emailTextField.text
    let password = passwordTextField.text
    let confirmPassword = confirmPasswordField.text
    let birthDate = birthDateTextField.text

    if userName?.isEmpty ?? true && email?.isEmpty ?? true && password?.isEmpty ?? true && confirmPassword?.isEmpty ?? true && birthDate?.isEmpty ?? true {
        let alert = UIAlertController(title: nil, message: "Youmust fill all the fields with all the required infotmation to signup", preferredStyle: .alert)
        let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
        alert.addAction(okAction)
        present(alert, animated: true, completion: nil)
    }else {
        emailTextField.isUserInteractionEnabled = false
        passwordTextField.isUserInteractionEnabled = false
        confirmPasswordField.isUserInteractionEnabled = false
        birthDateTextField.isUserInteractionEnabled = false
        performSegue(withIdentifier: "goToHome", sender: nil)
        print("LogIn succesful!")
        print (userAge)
    }
}

我希望修复此错误,以便当用户由于某种原因而删除警报再次弹出的字段之一时,告诉用户填写所有要填写的内容。

3 个答案:

答案 0 :(得分:3)

您要求所有字段都为空才能触发警报。您需要知道其中之一是空的。尝试将&&更改为||

if userName?.isEmpty ?? true || email?.isEmpty ?? true || password?.isEmpty ?? true || confirmPassword?.isEmpty ?? true || birthDate?.isEmpty ?? true

答案 1 :(得分:1)

您应该在||中使用if而不是&&,因为您希望在其中至少一个字段为空时显示警报

答案 2 :(得分:1)

您需要使用运算符或代替,因为您需要检查任何空文本字段:

func1(){
    pointer *result;
    if(func2(&result) == 0) {
       if (result != NULL) {
           ...
       } else {
           ...
       } 
    }
}

int func2(pointer **result){
    ... 
    /* success case */
    *result = null_or_not ? NULL : some_pointer;
    return 0;

    /* error case */
    return error_code;
    /* in this case result could be left untouched or set to NULL.
       up to you to define the interface there. */
}