Apakah ada cara untuk memeriksa string untuk nil
dan ""
di Swift? Di Rails, saya bisa gunakan blank()
untuk memeriksa.
Saat ini saya memiliki ini, tetapi tampaknya berlebihan:
if stringA? != nil {
if !stringA!.isEmpty {
...blah blah
}
}
Jawaban:
Jika Anda berurusan dengan Strings opsional, ini berfungsi:
The
??
Operator nil penggabungan kembali sisi kiri jika non-nil, jika tidak maka kembali sisi kanan.Anda juga dapat menggunakannya seperti ini untuk mengembalikan nilai default:
sumber
Anda mungkin bisa menggunakan klausa if-let-where:
Swift 3:
Swift 2:
sumber
fatal error: unexpectedly found nil while unwrapping an Optional value
tetapi konstanta sayastring
memiliki data string.if let string = string, !string.isEmpty { /* string is not blank */ }
guard let
adalah alternatif jika Anda ingin mengakhiri aliran kontrol di bawah pernyataan. Namun tidak ada yang dibuka di mana klausa di sini (the! Adalah negasi boolean)Jika Anda menggunakan Swift 2, berikut adalah contoh yang dibuat oleh rekan saya, yang menambahkan properti isNilOrEmpty pada Strings opsional:
Anda kemudian dapat menggunakan isNilOrEmpty pada string opsional itu sendiri
sumber
where Wrapped:
harus menentukan protokol dan bukan tipe.isNilOrEmpty
untukhasValue
(atau sesuatu seperti itu) dan reverse logikaMenggunakan
guard
pernyataan ituSaya menggunakan Swift untuk sementara waktu sebelum saya mengetahui tentang
guard
pernyataan itu. Sekarang saya penggemar berat. Ini digunakan mirip denganif
pernyataan itu, tetapi memungkinkan untuk kembali lebih awal dan hanya membuat kode lebih bersih secara umum.Untuk menggunakan pelindung saat memeriksa untuk memastikan bahwa string tidak nol atau kosong, Anda dapat melakukan hal berikut:
Ini membuka bungkus string opsional dan memeriksa bahwa itu tidak kosong sekaligus. Jika nil (atau kosong), maka Anda segera kembali dari fungsi Anda (atau loop) dan semuanya setelah itu diabaikan. Tetapi jika pernyataan penjaga terlewati, maka Anda dapat menggunakan string yang terbuka dengan aman.
Lihat juga
sumber
nil
atau kosong, orang tidak mau meneleponprint(myString)
. Jika Anda perlu melanjutkan eksekusi setelahnil
atau kosongString
, maka Anda akan menggunakanif let
daripadaguard
.Dengan Swift 5, Anda dapat menerapkan
Optional
ekstensi untukString
tipe dengan properti boolean yang kembali jika string opsional tidak memiliki nilai atau kosong:Namun,
String
mengimplementasikanisEmpty
properti dengan mematuhi protokolCollection
. Karenanya kita dapat mengganti batasan generik kode sebelumnya (Wrapped == String
) dengan yang lebih luas (Wrapped: Collection
) sehinggaArray
,Dictionary
danSet
juga menguntungkanisNilOrEmpty
properti baru kami :Penggunaan dengan
String
s:Penggunaan dengan
Array
s:Sumber:
sumber
isNilOrEmpty
menjadiisEmptyOrNil
untuk mencocokkan awalan sehingga mudah ditemukan melalui pola yang sama untuk pelengkapan otomatis. Saya perhatikan lebih banyak adopsi ekstensi ini dari kolega yang bekerja sama dengan saya hanya dari mereka yang menemukannya dengan cara ini.sumber
Saya tahu ada banyak jawaban untuk pertanyaan ini, tetapi tidak satu pun dari mereka tampaknya senyaman ini (menurut saya) untuk memvalidasi
UITextField
data, yang merupakan salah satu kasus paling umum untuk menggunakannya:Anda bisa menggunakannya
Anda juga dapat melewatkan
.trimmingCharacters(in:.whitespaces)
jika Anda tidak menganggap spasi putih sebagai string kosong atau menggunakannya untuk tes input yang lebih komplekssumber
Saya ingin merekomendasikan.
map
menerapkan argumen fungsi jika opsional.Some
.Pengambilan taman bermain juga menunjukkan kemungkinan lain dengan Swift 1.2 baru jika memungkinkan penjilidan opsional.
sumber
Jika Anda ingin mengakses string sebagai non-opsional, Anda harus menggunakan Jawaban Ryan , tetapi jika Anda hanya peduli tentang kekosongan string, singkatan yang saya pilih untuk ini adalah
Karena
==
berfungsi baik dengan boolean opsional, saya pikir ini membuat kode dapat dibaca tanpa mengaburkan niat asli.Jika Anda ingin memeriksa yang sebaliknya: jika stringnya adalah
nil
atau""
, saya lebih suka memeriksa kedua kasus secara eksplisit untuk menunjukkan maksud yang benar:sumber
SWIFT 3
Gunakan seperti ini pada string opsional:
sumber
Swift 3 Untuk memeriksa String Kosong cara terbaik
sumber
Anda dapat membuat fungsi kustom Anda sendiri, jika itu adalah sesuatu yang Anda harapkan banyak dilakukan.
sumber
Solusi Swift 3 Gunakan nilai unrapped opsional dan periksa boolean.
sumber
Menggunakan isEmpty
Menggunakan allSatisfy
Menggunakan String opsional
Referensi: https://useyourloaf.com/blog/empty-strings-in-swift/
sumber
Buat ekstensi kelas String:
Perhatikan ini akan mengembalikan BENAR jika string berisi satu atau lebih kosong. Untuk memperlakukan string kosong sebagai "kosong", gunakan ...
... sebagai gantinya. Ini membutuhkan Yayasan.
Gunakan demikian ...
sumber
Swift 3 Ini berfungsi dengan baik untuk memeriksa apakah string benar-benar kosong. Karena isEmpty mengembalikan true ketika ada spasi putih.
Contoh:
sumber
Anda harus melakukan sesuatu seperti ini:
if !(string?.isEmpty ?? true) { //Not nil nor empty }
Operator penggabungan nol tidak akan memeriksa jika opsional tidak nol, dalam hal ini bukan nol lalu memeriksa propertinya, dalam hal ini adalah kosong. Karena opsional ini bisa nol, Anda memberikan nilai default yang akan digunakan ketika opsional Anda nol.
sumber
Ini adalah solusi umum untuk semua jenis yang sesuai dengan
Collection
protokol, yang meliputiString
:sumber
Ketika berhadapan dengan meneruskan nilai dari db lokal ke server dan sebaliknya, saya mengalami terlalu banyak masalah dengan? Dan! Dan apa yang tidak.
Jadi saya membuat utilitas Swift3.0 untuk menangani kasus nol dan saya hampir sepenuhnya dapat menghindari? Dan di kode.
Ex:-
Sebelum :
Setelah:
dan ketika diminta untuk memeriksa string yang valid,
Ini menyelamatkan saya harus melalui kesulitan menambahkan dan menghapus banyak dan setelah menulis kode yang masuk akal.
sumber
Gunakan operator ternary (juga dikenal sebagai operator kondisional,
C++ forever!
):if stringA != nil ? stringA!.isEmpty == false : false { /* ... */ }
The
stringA!
kekuatan-unwrapping terjadi hanya jikastringA != nil
, sehingga aman. Kata== false
ini agak lebih mudah dibaca daripada tanda seru lainnya di!(stringA!.isEmpty)
.Saya pribadi lebih suka bentuk yang sedikit berbeda:
if stringA == nil ? false : stringA!.isEmpty == false { /* ... */ }
Dalam pernyataan di atas, segera sangat jelas bahwa seluruh
if
blok tidak dieksekusi ketika sebuah variabelnil
.sumber
membantu ketika mendapatkan nilai dari UITextField dan memeriksa
nil
&empty
stringInilah fungsi Anda (ketika Anda mengetuk a
button
) yang mendapat string dari UITextField dan melakukan beberapa hal lainnyaIni akan menjaga
nil
nilai sertaempty
string.Ini bekerja dengan sangat baik untuk saya.
sumber
Menurut pendapat saya, cara terbaik untuk memeriksa nil dan string kosong adalah dengan mengambil jumlah string.
sumber
Anda dapat menggunakan fungsi ini
sumber
nil
ke fungsi ini sama sekali (kecuali dari objc, dalam hal ini memang akan crash).