Mengapa UITextfField saya tampaknya TIDAK nihil, meskipun saya membiarkan bidang tersebut kosong? Bagian saya yang lain dari pernyataan if tidak dibaca

Saya sedang berlatih pemrograman cepat dengan membuat aplikasi yang menyimpan data pelanggan. Aplikasi ini memiliki beberapa bidang teks tempat orang harus mengetikkan nama, alamat email, nomor telepon, dan jumlah produk yang dibeli. Kemudian dengan tombol 'kirim' mereka menyimpan informasi tersebut ke dalam basis data. Namun, jika salah satu bidang kosong, kesalahan akan terjadi dan sebuah pesan akan muncul kepada pengguna yang memberi tahu dia bahwa salah satu bidang kosong.

Masalahnya adalah meskipun textfield kosong, kompiler tidak membacanya sebagai nihil, jadi kondisi saya tidak berfungsi.

Untuk mempermudah, saya menghilangkan banyak kode. Saya hanya akan bekerja dengan satu UITextField (nama pelanggan), dan kondisi saya akan memeriksa apakah TextField kosong atau tidak. Jika kosong, seharusnya tercetak "Silakan masukkan nama yang valid." jika TIDAK nihil, harusnya tercetak nama pelanggan.

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")
        }
}

Alternatifnya, saya juga memeriksa kondisi saya dalam format berikut:

@IBAction func submitCustomer(_ sender: UIButton) {

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

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

Masalah:

Bahkan jika saya membiarkan kolom teks kosong, kompiler tidak membaca bagian "lain" dari kondisi tersebut. Yang sepertinya menunjukkan bahwa bidang tersebut tidak pernah nihil. Apa yang mungkin terjadi?


person Nando    schedule 10.11.2017    source sumber
comment
Maaf, tapi hanya untuk memastikan, belum ada nilai di dalamnya dari pembuat antarmuka, bukan?   -  person MQLN    schedule 10.11.2017
comment
bidang teks memiliki properti yang disebut hasText. if customerNameTextField.hasText {. pilihan lain adalah menguji apakah tidak kosong memeriksa properti teks if customerNameTextField.text?.isEmpty == false {   -  person Leo Dabus    schedule 10.11.2017
comment
Ngomong-ngomong, ini sudah ditanyakan berkali-kali di seluruh web.   -  person Leo Dabus    schedule 10.11.2017
comment
@LeoDabus Anda mungkin memikirkan UITextView. Saya tidak dapat menemukan hasText sebagai properti UITextField di dokumen Apple.   -  person Mike Taverne    schedule 10.11.2017
comment
@MikeTaverne Tidak. Saya berbicara tentang UITextField. Sebenarnya keduanya.   -  person Leo Dabus    schedule 10.11.2017
comment
bidang teks ketika Anda tidak memasukkan nilai apa pun sehingga nilai itu karena tipe data tersebut dalam string.   -  person Sagar Bhut    schedule 10.11.2017
comment
@MikeTaverne itu karena ini adalah properti instance dari UIKeyInput developer.apple.com/documentation /uikit/uikeyinput/ tetapi hanya tersedia iOS10+   -  person Leo Dabus    schedule 10.11.2017
comment
@LeoDabus Anda benar.   -  person Mike Taverne    schedule 10.11.2017


Jawaban (3)


Menurut dokumen Apple:

String ini adalah @"" secara default.

Yaitu. itu tidak nihil secara default.

person Mike Taverne    schedule 10.11.2017

Untuk memeriksa UITextField kosong, Anda dapat menggunakannya secara sederhana

txtFieldName.text?.isEmpty

ini akan memberi Anda nilai BOOL.

person singh.jitendra    schedule 10.11.2017
comment
Itu akan memberi Anda nilai Bool? (dengan kata lain, nilai opsional). - person rmaddy; 10.11.2017
comment
Sekadar melengkapi komentar rmaddy bisa berupa true, false atau nil (perhatikan bahwa nilai defaultnya adalah string kosong tetapi Anda masih perlu mengancamnya sebagai opsional) jadi Anda perlu menambahkan == true atau == false - person Leo Dabus; 10.11.2017
comment
@LeoDabus Pilihan lain selain menambahkan == true (karena opsional), Anda dapat menggunakan if txtFieldName.text!.isEmpty { karena text tidak akan pernah menjadi nil. Meskipun Anda menyetelnya ke nil, membacanya segera akan menghasilkan "". - person rmaddy; 10.11.2017
comment
@rmaddy itu benar, Anda dapat membukanya secara paksa tanpa rasa bersalah, tetapi saya lebih suka == benar. Sebenarnya saya menggunakan properti hasText. Saya hanya menggunakan == true untuk Bool opsional selain properti teks bidang teks - person Leo Dabus; 10.11.2017
comment
Kita sudah keluar dari topik. Pertanyaan OPnya adalah mengapa kondisi teks != nil tidak terpenuhi. - person Mike Taverne; 10.11.2017

Anda cukup memeriksa:

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