2015-10-20 2 views
2

Итак, я разрабатываю экран signUp приложения. Я пытаюсь проверить каждое поле на экране signUp, чтобы узнать, пуст ли он, и если да, отобразите сообщение об ошибке на ярлыке для пользователя. Я использую цепочку либо еще-КСФПроверьте, пусто ли несколько текстовых полей - iOS с Swift

if ((self.firstNameField.text?.isEmpty) != nil) { 
     errorLabel.text = "first name missing" 
     errorLabel.hidden = false 
    } 

    else if ((self.lastNameField.text?.isEmpty) != nil) { 
     errorLabel.text = "last name missing" 
     errorLabel.hidden = false 
    } 

    else if ((self.emailField.text?.isEmpty) != nil) { 
     errorLabel.text = "email missing" 
     errorLabel.hidden = false 
    } 

    else if ((self.passwordField.text?.isEmpty) != nil) { 
     errorLabel.text = "password missing" 
     errorLabel.hidden = false 
    } 

    else if ((self.confirmPasswordField.text?.isEmpty) != nil) { 
     errorLabel.text = "password confirmation missing" 
     errorLabel.hidden = false 
    } 

    else if (self.passwordField.text != self.confirmPasswordField.text) { 
     errorLabel.text = "Passwords don't match, try again!" 
     errorLabel.hidden = false 
    } 
    //omitted what happens if there are no fields missing 

Теперь, когда я запустить приложение со всем TextFields пустым, errorLabel выводит сообщение «первое имя пропавшего». Ввод имени и нажатие кнопки регистрации ничего не делает. Я хочу, чтобы это изменилось на «фамилию отсутствует», но она остается «с именем без имени».

+0

Так вы считаете, что '(self.firstNameField. текст? .isEmpty)! = nil' будет как-то ошибочным ???? – matt

+0

Где вы называете этот код проверки? Он должен быть последовательно вызван всякий раз, когда вы меняете любое текстовое поле или подписываете его. – Shripada

+0

В Swift 2 я бы сделал: if firstNameField.text.character.count == 0 {.. –

ответ

7

Причина этого в том, что вы проверяете, self.field.text?.isEmpty != nil. Вы должны проверить на (self.field.text?.isEmpty ?? true)

По существу, вы пытаетесь получить текст в поле, а если текста нет, то возвращается nil. Используя field.text?, вы делаете следующую переменную, к которой вы обращаетесь nil, исходя из того, является ли field.text нулем. Итак, когда текста нет, field.text == nil, выполнение field.text?.isEmpty всегда будет возвращать нуль.

Когда есть текст, field.text?.isEmpty не будет равен нулю, и всегда будет ложным, но nil != false, поэтому оператор всегда будет возвращать false.

Чтобы исправить это, вы должны проверить

if(self.field.text?.isEmpty ?? true) 

, который по существу означает

if((self.field.text?.isEmpty == nil ? true : self.field.text?.isEmpty)) 

В основном, это возвращает истину, если field.text == nil (что бы field.text?.isEmpty ноль, делая результат true в связи с ??), а также вернет true, если field.text != nil || field.text.isEmpty. Он возвращает только false, если self.field.text != nil && !self.field.text.isEmpty.

Другой способ написать это заявление будет

if(self.field.text == nil || self.field.text!.isEmpty) 
+0

Это сработало, спасибо! –

+0

Нет проблем! Если вы хотите отметить этот ответ как правильный, вы можете нажать галочку под подсчетом голосов – Jojodmo

1

Попробуйте это:

if self.firstNameField.text?.isEmpty { 
    errorLabel.text = "first name missing" 
    errorLabel.hidden = false 
} 

else if self.lastNameField.text?.isEmpty { 
    errorLabel.text = "last name missing" 
    errorLabel.hidden = false 
} 

else if self.emailField.text?.isEmpty { 
    errorLabel.text = "email missing" 
    errorLabel.hidden = false 
} 

else if self.passwordField.text?.isEmpty { 
    errorLabel.text = "password missing" 
    errorLabel.hidden = false 
} 

else if self.confirmPasswordField.text?.isEmpty { 
    errorLabel.text = "password confirmation missing" 
    errorLabel.hidden = false 
} 

else if (self.passwordField.text != self.confirmPasswordField.text) { 
    errorLabel.text = "Passwords don't match, try again!" 
    errorLabel.hidden = false 
} 
1

Попробуйте это:

if self.firstNameField.text! == "" { 
    errorLabel.text = "first name missing" 
    errorLabel.hidden = false 
} 
else if self.lastNameField.text! == "" { 
    errorLabel.text = "last name missing" 
    errorLabel.hidden = false 
} 
else if self.emailField.text! == "" { 
    errorLabel.text = "email missing" 
    errorLabel.hidden = false 
} 
else if self.passwordField.text! == "" { 
    errorLabel.text = "password missing" 
    errorLabel.hidden = false 
} 
else if self.confirmPasswordField.text! == "" { 
    errorLabel.text = "password confirmation missing" 
    errorLabel.hidden = false 
} 
else if !(self.passwordField.text! == self.confirmPasswordField.text!) { 
    errorLabel.text = "Passwords don't match, try again!" 
    errorLabel.hidden = false 
} 
Смежные вопросы