Валидационный код проверяет только первый элемент? - PullRequest
1 голос
/ 05 июня 2019

Я создаю приложение, используя Swift, где мне нужно проверить форму перед ее отправкой.Прямо сейчас у меня есть вложенный оператор if / else, прикрепленный к кнопке «Сохранить» внутри IBAction, где, если он видит, что первый вход пустой, т.е. имя, эта метка «Имя» становится красной и получает *, сигнализируя, что пользователь должен ввестиэта информация, прежде чем продолжить.Тем не менее, я обнаружил ошибку, когда он проверяет только первый ввод и делает его красным (если он пуст), даже если вся страница пуста.

Как можно более эффективно создать этот код проверки, чтобы он проверял все значения перед тем, как окрашивать элементы в красный цвет и только в первый элемент.

`if (Name!.text!.isEmpty) {
            nameLabel.text = "Name *"
            nameLabel.textColor = UIColor.red
        } else {
            if (Date!.text!.isEmpty) {
                dateLabel.text = "Outage Event ID *"
                dateLabel.textColor = UIColor.red
            } `

Это длиннее, но я не виделнужно добавить их все, чтобы это были первые два вложенных оператора if / else.

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Прежде всего следуйте правильному naming rules for variables,

  1. не используйте keywords в качестве variable имен. Date - это ключевое слово. Вместо этого используйте date или dateField или что-то еще.
  2. Назовите переменные с первой буквой как маленькую вместо заглавной, т.е. name вместо Name.

Вместо использования вложенных операторов if используйте несколько операторов if для проверки всех полей, т. Е.

if let text = name?.text, text.isEmpty {
    nameLabel.text = "Name *"
    nameLabel.textColor = UIColor.red
}

if let text = date?.text, text.isEmpty {
    dateLabel.text = "Outage Event ID *"
    dateLabel.textColor = UIColor.red
}
0 голосов
/ 05 июня 2019

Если вы вложите в If / else (s), он запустит только один из них (если все они пусты)

В вашем примере имя уже пусто, поэтому оно выполняет ваш код if и отбрасывает остальные.

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

for textField in [nameTextField, dateTextField, etc] {
   if textField.isEmpty {
      textField.textColor = .red
      textField.text.append(" *")
   }
}

Конечно, этот способ работает хорошо для цвета, но не так хорош для *, если вы хотите не просто добавить, а изменить его, как я полагаю, вы делаете в случае с датой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...