Почему мой UITextfField кажется НЕ нулевым, даже если я оставлю поле пустым? Моя другая часть оператора if не читается

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

Проблема в том, что даже если текстовое поле пусто, компилятор не читает его как ноль, поэтому мое условие не работает.

Для простоты я опускаю много кода. Я буду работать только с одним UITextField (имя клиента), и мое условие будет проверять, является ли TextField пустым или нет. Если пусто, должно быть напечатано «Пожалуйста, введите действительное имя». если оно НЕ нулевое, должно быть напечатано имя клиента.

class RaffleViewControler: UIViewController, UITextFieldDelegate {


    @IBOutlet weak var customerNameTextField: UITextField!

    @IBAction func addCustomerName(_ sender: UITextField) {


    }


    @IBOutlet weak var submitButton: UIButton!


    @IBAction func submitCustomer(_ sender: UIButton) {

           if let name = customerNameTextField.text {
            print(name)

        } else {
            print("Please enter a valid name")
        }
}

В качестве альтернативы я также проверял свое состояние в следующем формате:

@IBAction func submitCustomer(_ sender: UIButton) {

               if customerNameTextField.text != nil {
                print("Congrats. Your data is in our database")

            } else {
                print("Please enter a valid name")
            }
  }

Проблема:

Даже если я оставлю текстовое поле пустым, компилятор не прочитает «еще» часть условия. Что, кажется, указывает на то, что поле никогда не равно нулю. Что может происходить?


person Nando    schedule 10.11.2017    source источник
comment
Извините, но на всякий случай в нем уже нет значения из построителя интерфейса, верно?   -  person MQLN    schedule 10.11.2017
comment
текстовое поле имеет свойство hasText. if customerNameTextField.hasText {. другой вариант - проверить, не является ли он пустым, проверяя свойство text if customerNameTextField.text?.isEmpty == false {   -  person Leo Dabus    schedule 10.11.2017
comment
Кстати, об этом уже столько раз спрашивали в сети.   -  person Leo Dabus    schedule 10.11.2017
comment
@LeoDabus Возможно, вы думаете об UITextView. Я не смог найти hasText как свойство UITextField в документах Apple.   -  person Mike Taverne    schedule 10.11.2017
comment
@MikeTaverne Нет. Я говорю об UITextField. На самом деле они оба.   -  person Leo Dabus    schedule 10.11.2017
comment
текстовое поле, когда вы не вводите какое-либо значение, поэтому это значение связано с тем, что этот тип данных находится в строке.   -  person Sagar Bhut    schedule 10.11.2017
comment
@MikeTaverne, потому что это свойство экземпляра UIKeyInput developer.apple.com/documentation /uikit/uikeyinput/, но он доступен только для iOS10+   -  person Leo Dabus    schedule 10.11.2017
comment
@LeoDabus, ты прав.   -  person Mike Taverne    schedule 10.11.2017


Ответы (3)


Согласно документам Apple:

Эта строка @"" по умолчанию.

т.е. это не ноль по умолчанию.

person Mike Taverne    schedule 10.11.2017

Чтобы проверить пустой UITextField, вы можете просто использовать

txtFieldName.text?.isEmpty

это даст вам значение BOOL.

person singh.jitendra    schedule 10.11.2017
comment
Это даст вам значение Bool? (другими словами, необязательное значение). - person rmaddy; 10.11.2017
comment
Просто в дополнение к комментарию rmaddy это может быть true, false или nil (обратите внимание, что его значение по умолчанию - пустая строка, но вам все равно нужно угрожать ею как необязательной), поэтому вам нужно добавить == true или == false - person Leo Dabus; 10.11.2017
comment
@LeoDabus Еще один вариант, помимо добавления == true (из-за необязательности), вы можете использовать if txtFieldName.text!.isEmpty {, поскольку text на самом деле никогда не будет nil. Даже если вы установите значение nil, немедленное чтение вернет "". - person rmaddy; 10.11.2017
comment
@rmaddy это правда, вы можете принудительно развернуть его без какой-либо вины, но я предпочитаю == true. На самом деле я использую свойство hasText. Я использую == true только для необязательного Bool, кроме свойства текста текстового поля. - person Leo Dabus; 10.11.2017
comment
Мы далеко не в теме. Вопрос ОП заключается в том, почему условие text != nil не выполняется. - person Mike Taverne; 10.11.2017

Вы можете просто проверить:

if self.customerNameTextField.text == "" {
// An empty text field.
} else {
// Not empty.
}
person Mannopson    schedule 10.11.2017