Saya menggunakan ini di aplikasi iPhone saya
if (title == nil) {
// do something
}
tetapi ada beberapa pengecualian, dan konsol menunjukkan bahwa judulnya adalah "(nol)".
Jadi saya menggunakan ini sekarang:
if (title == nil || [title isKindOfClass:[NSNull class]]) {
//do something
}
Apa perbedaannya, dan apa cara terbaik untuk menentukan apakah suatu string adalah nol?
ios
objective-c
cocoa-touch
Teo Choong Ping
sumber
sumber
Jawaban:
Seperti yang telah ditunjukkan oleh orang lain, ada banyak jenis "null" di bawah Cocoa / Objective C. Tetapi satu hal lagi yang perlu diperhatikan adalah bahwa [judul isKindOfClass: [NSNull class]] tidak ada gunanya kompleks karena [NSNull null] didokumentasikan menjadi singleton sehingga Anda bisa memeriksa kesetaraan pointer. Lihat Topik untuk Kakao: Menggunakan Null .
Jadi tes yang bagus mungkin:
Perhatikan bagaimana Anda dapat menggunakan fakta bahwa meskipun judul adalah nihil, title.length akan mengembalikan 0 / nil / false, yaitu 0 dalam kasus ini, jadi Anda tidak perlu membuat huruf khusus. Ini adalah sesuatu yang orang-orang yang baru ke Objective C kesulitan membiasakan diri, terutama datang dari bahasa lain di mana pesan / metode panggilan ke nil crash.
sumber
Map
item - yang adanull
di Dart - tidak sesuai dengannil
atauNULL
di Objective C. Alasannya adalah sebenarnyaNUNull null
, bukanNULL
nol. @PeterNLewis Terima Kasihhanya sesederhana
ingat bahwa dalam tujuan C jika objek bernilai nol mengembalikan 0 sebagai nilai.
Ini akan membuat Anda menjadi string nol dan string 0 panjang.
sumber
object = @"";
atauobject = nil;
)Lihat artikel terkait berikut di situs ini:
Saya pikir kesalahan Anda terkait dengan sesuatu yang lain karena Anda tidak perlu melakukan pemeriksaan tambahan.
Lihat juga pertanyaan terkait ini: Pemeriksaan kolom teks nl sqlite yang benar
sumber
Saya telah menemukan bahwa untuk benar-benar melakukannya Anda akhirnya harus melakukan sesuatu yang mirip
Kalau tidak, Anda mendapatkan situasi aneh di mana kontrol akan tetap memotong cek Anda. Saya belum menemukan satu yang membuatnya melewati
isEqual
dan panjang pemeriksaan.sumber
Whats dengan semua ini "berfungsi untuk saya jawaban"? Kita semua mengkode dalam bahasa yang sama dan aturannya adalah
Itulah yang akan berhasil untuk semua. Jika solusi yang diberikan hanya "bekerja untuk Anda", itu hanya karena aliran aplikasi Anda tidak akan memungkinkan untuk skenario di mana referensi mungkin nol atau panjang string menjadi 0. Cara yang tepat untuk melakukan ini adalah metode yang akan menangani apa yang Anda inginkan dalam semua kasus.
sumber
nil
(catatan: bukan "null"), maka mengirim pesan, sepertilength
, akan menghasilkan 0 (atau nilai 0 yang sesuai untuk jenis pengembalian metode). Itulah aturan bahasanya. Tidak perlu memeriksa secaranil
terpisah dalam hal ini.Jika Anda ingin menguji terhadap semua benda kosong / kosong (seperti string kosong atau array / set kosong) Anda dapat menggunakan yang berikut ini:
sumber
Ada dua situasi:
Ada kemungkinan bahwa suatu objek adalah
[NSNull null]
, atau tidak mungkin.Aplikasi Anda biasanya tidak boleh menggunakan
[NSNull null];
Anda hanya menggunakannya jika Anda ingin meletakkan objek " null " ke dalam array, atau menggunakannya sebagai nilai kamus. Dan kemudian Anda harus tahu array atau kamus mana yang mungkin berisi nilai nol, dan yang mungkin tidak.Jika Anda berpikir bahwa sebuah array tidak pernah mengandung
[NSNull null]
nilai, maka jangan memeriksanya. Jika ada[NSNull null]
, Anda mungkin mendapatkan pengecualian tetapi tidak apa-apa: Pengecualian Objective-C menunjukkan kesalahan pemrograman. Dan Anda memiliki kesalahan pemrograman yang perlu diperbaiki dengan mengubah beberapa kode.Jika suatu benda bisa menjadi
[NSNull null]
, maka Anda memeriksa ini cukup hanya dengan pengujian(object == [NSNull null])
. MemanggilisEqual
atau memeriksa kelas objek tidak masuk akal. Hanya ada satu[NSNull null]
objek, dan operator C tua biasa memeriksa untuk itu baik-baik saja dengan cara yang paling mudah dan paling efisien.Jika Anda memeriksa
NSString
objek yang tidak bisa[NSNull null]
(karena Anda tahu itu tidak bisa[NSNull null]
atau karena Anda baru saja mengeceknya berbeda[NSNull null]
, maka Anda perlu bertanya pada diri sendiri bagaimana Anda ingin memperlakukan string kosong, yaitu satu dengan panjang 0. Jika Anda memperlakukannya adalahnull
string sepertinil
, kemudian tes(object.length == 0)
. object.length akan mengembalikan 0 jikaobject == nil
, jadi tes ini mencakup objek dan string nil dengan panjang 0. Jika Anda memperlakukan string dengan panjang 0 berbeda dari string nil, cukup periksa apakahobject == nil
.Terakhir, jika Anda ingin menambahkan string ke array atau kamus, dan string tersebut bisa nol, Anda memiliki pilihan untuk tidak menambahkannya, menggantinya
@""
, atau menggantinya dengan[NSNull null]
. Menggantinya dengan@""
berarti Anda kehilangan kemampuan untuk membedakan antara "tanpa string" dan "string dengan panjang 0". Menggantinya dengan[NSNull null]
berarti Anda harus menulis kode ketika Anda mengakses array atau kamus yang memeriksa[NSNull null]
objek.sumber
Anda baru saja memeriksa nol
atau
sumber
Solusi MACRO (2020)
Berikut ini adalah makro yang saya gunakan untuk string aman daripada mendapatkan string " (null) " pada UILabel misalnya:
katakanlah Anda memiliki kelas anggota dan properti nama, dan nama adalah nihil:
dengan makro:
bagus dan bersih 😊
Solusi Ekstensi (2020)
Jika Anda lebih suka memeriksa nihil Null dan string kosong di proyek Anda, Anda dapat menggunakan baris ekstensi saya di bawah ini:
NSString + Extension.h
NSString + Extension.m
Contoh Penggunaan
sumber
sumber
Coba ini untuk cek nol
sumber
Ini akan bekerja dengan kasus-kasus berikut,
NSString *strOne = @""
ATAUNSString *strOne = @"StackOverflow"
ATAUNSString *strOne = [NSNull null]
ATAUNSString *strOne
.sumber
Jika hal semacam itu belum ada, Anda dapat membuat kategori NSString:
sumber
Yang berhasil bagi saya adalah
if ( !myobject )
sumber
NSArray *testarray = [NSArray arrayWithObjects:[NSNull null],@"", nil]; NSString *string = [testarray objectAtIndex:0]; NSLog(@"null string value: %@",string); if (!string) { NSLog(@"string evaluates to null"); } if (string && (string==(id)[NSNull null])) { NSLog(@"string does not evaluate to null"); }
Pemeriksaan lengkap string untuk kondisi nol dapat sebagai berikut: <\ br>
sumber
Saya hanya memeriksa string nol dengan
sumber
sumber
sumber
Untuk string:
}
Lihat gambar di bawah ini:
sumber
Untuk string:
sumber