Ошибка в выражении Swift If

Я установил 4 UITextFields и один UIButton. Это работает как страница регистрации, где пользователь предоставляет такие данные, как имя пользователя, адрес электронной почты, пароль и т. д. Таким образом, только и только там, где все текстовые поля пользовательского интерфейса НЕ пусты, кнопка регистрации будет включена, чтобы пользователь мог нажать внутри и перейти к следующему UIView. Все работает нормально, но я замечаю небольшой баг, который бьет по моему последнему нерву XD.

Если пользователь заполнит все поля UItextField всей необходимой информацией, но по какой-то причине вернется в одно из них, пока поле не станет пустым, а затем нажмет кнопку регистрации, регистрация будет успешной, даже если поле было пустым. Пожалуйста, я почти неделю пытался понять это.

Как я настроил 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)
    }
}

Я ожидаю исправить эту ошибку, поэтому, когда пользователь по какой-то причине стирает одно из полей, снова появляется предупреждение, предлагающее пользователю заполнить все поля для регистрации.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
68
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны использовать || в своем if вместо &&, потому что вы хотите показывать предупреждение, когда хотя бы одно из этих полей пусто.

Ответ принят как подходящий

Вы требуете, чтобы все поля были пустыми, чтобы вызвать оповещение. Что вам нужно, так это знать, что один из них пуст. Попробуйте заменить && на ||.

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

ОМГ спасибо большое!!!! это работает нормально. И большое спасибо другим людям, которые нашли время, чтобы ответить. Очень благодарны!

Eroay 15.05.2019 04:41

Вам нужно использовать оператор или вместо и, потому что у вас есть проверка для любого пустого текстового поля:

@objc private func handleSignUp () {

    if textField1.text!.isEmpty || textField2.text!.isEmpty || textField3.text!.isEmpty || textField4.text!.isEmpty || textField5.text!.isEmpty {
        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 {
        textField2.isUserInteractionEnabled = false
        textField3.isUserInteractionEnabled = false
        textField4.isUserInteractionEnabled = false
        textField5.isUserInteractionEnabled = false
        performSegue(withIdentifier: "goToHome", sender: nil)
        print("LogIn succesful!")
        print ("userAge")

    }
}

Другие вопросы по теме