Apakah ada yang namanya metode beginWith () atau yang serupa di Swift?
Saya pada dasarnya mencoba untuk memeriksa apakah string tertentu dimulai dengan string lain. Saya juga ingin menjadi case-sensitive.
Seperti yang mungkin bisa Anda katakan, saya hanya mencoba melakukan fitur pencarian sederhana tetapi saya sepertinya gagal total dalam hal ini.
Inilah yang saya suka:
mengetik "sa" harus memberi saya hasil untuk "San Antonio", "Santa Fe", dll. mengetik "SA" atau "Sa" atau bahkan "SA" juga harus mengembalikan "San Antonio" atau "Santa Fe".
Saya menggunakan
self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
sebelum iOS9 dan itu berfungsi dengan baik. Namun, setelah memutakhirkan ke iOS9, itu berhenti bekerja dan sekarang pencarian bersifat case sensitif.
var city = "San Antonio"
var searchString = "san "
if(city.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
print("San Antonio starts with san ");
}
var myString = "Just a string with san within it"
if(myString.rangeOfString(searchString, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil){
print("I don't want this string to print bc myString does not start with san ");
}
Jawaban:
gunakan
hasPrefix
sebagai gantistartsWith
.Contoh:
sumber
"string".lowercased()
di sini adalah implementasi ekstensi Swift dari beginWith:
Contoh penggunaan:
sumber
Untuk secara khusus menjawab pencocokan awalan yang tidak sensitif :
dalam Swift murni (direkomendasikan sebagian besar waktu)
atau:
Catatan: untuk awalan kosong
""
kedua implementasi akan kembalitrue
menggunakan Foundation
range(of:options:)
catatan: untuk awalan kosong
""
itu akan kembalifalse
dan menjadi jelek dengan regex (saya sudah melihatnya ...)
catatan: untuk awalan kosong
""
itu akan kembalifalse
sumber
Di Swift 4
func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix) -> Bool where PossiblePrefix : Sequence, String.Element == PossiblePrefix.Element
akan diperkenalkan.Contoh Penggunaan:
sumber
Sunting: diperbarui untuk Swift 3.
Kelas Swift String memang memiliki metode case-sensitive
hasPrefix()
, tetapi jika Anda ingin pencarian case-sensitive Anda dapat menggunakan metode NSStringrange(of:options:)
.Catatan: Secara default, metode NSString tidak tersedia, tetapi jika Anda
import Foundation
memilikinya.Begitu:
Opsi dapat diberikan sebagai
.caseInsensitive
atau[.caseInsensitive]
. Anda akan menggunakan yang kedua jika Anda ingin menggunakan opsi tambahan, seperti:Pendekatan ini juga memiliki keuntungan karena dapat menggunakan opsi lain dengan pencarian, seperti
.diacriticInsensitive
pencarian. Hasil yang sama tidak dapat dicapai hanya dengan menggunakan. lowercased()
string.sumber
Versi Swift 3:
sumber
.anchored
. Lihat jawaban saya atau jawaban Oliver Atkinson.Di Swift 4 dengan ekstensi
Extension-example saya berisi 3 fungsi: centang do a String start with a subString, do a String end to a subString, dan do a String berisi subString.
Atur parameter isCaseSensitive ke false, jika Anda ingin mengabaikan adalah karakter "A" atau "a", jika tidak setel ke true.
Lihat komentar dalam kode untuk informasi lebih lanjut tentang cara kerjanya.
Kode:
Contoh cara menggunakan:
Untuk memeriksa lakukan mulai String dengan "TEST":
Untuk memeriksa lakukan mulai String dengan "test":
Untuk memeriksa lakukan akhir String dengan "G123":
Untuk memeriksa lakukan akhir String dengan "g123":
Untuk memeriksa apakah String berisi "RING12":
Untuk memeriksa apakah String berisi "ring12":
sumber