Dalam Objective-C
kode untuk memeriksa substring di NSString
is:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
Tetapi bagaimana saya melakukan ini di Swift?
Jawaban:
Anda dapat melakukan panggilan yang persis sama dengan Swift:
Swift 4 & Swift 5
Dalam Swift 4 String adalah kumpulan
Character
nilai, tidak seperti ini di Swift 2 dan 3, jadi Anda dapat menggunakan kode 1 yang lebih ringkas ini :Swift 3.0+
Swift Tua
Saya harap ini adalah solusi yang membantu karena beberapa orang, termasuk saya, mengalami beberapa masalah aneh dengan menelepon
containsString()
. 1PS. Jangan lupa
import Foundation
Catatan kaki
sumber
An NSRange structure giving the location and length in the receiver of the first occurrence of aString. Returns {NSNotFound, 0} if aString is not found or is empty (@"").
Jadi mungkin hanya memeriksanil
tidak akan berfungsi dengan baik.{NSNotFound, 0}
itu diwakili untuk Anda sebagai nihil. Jika rentang aktual, diwakili untuk Anda sebagai Rentang Swift (opsional). Keren.NSString
's.rangeOfString()
. Ini panggilanString
's.rangeOfString()
, yang dinyatakan sebagaifunc rangeOfString(aString: String, options mask: NSStringCompareOptions = default, range searchRange: Range<Index>? = default, locale: NSLocale? = default) -> Range<Index>?
Cara ekstensi
Cepat 4
Umumnya Swift 4 memiliki mengandung metode namun tersedia dari iOS 8.0+
Cepat 3.1
Anda dapat menulis ekstensi
contains:
dancontainsIgnoringCase
untukString
Versi Swift yang lebih lama
Contoh:
sumber
Foundation
...containsString
berfungsi dengan baik.Dari dokumen, tampaknya memanggil
containsString()
String seharusnya berfungsi:Namun, sepertinya tidak bekerja seperti itu.
Jika Anda mencoba menggunakan
someString.containsString(anotherString)
, Anda akan mendapatkan kesalahan waktu kompilasi yang menyatakan'String' does not contain a member named 'containsString'
.Jadi, Anda memiliki beberapa opsi, salah satunya adalah secara eksplisit menjembatani Anda
String
ke Objective-C dengan menggunakanbridgeToObjectiveC()
dua lainnya melibatkan secara eksplisit menggunakanNSString
dan yang terakhir melibatkan castingString
keNSString
Dengan menjembatani, Anda akan mendapatkan:
Dengan mengetik string secara eksplisit sebagai
NSString
, Anda akan mendapatkan:Jika Anda sudah ada
String
, Anda dapat menginisialisasi NSString dari itu dengan menggunakan NSString (string :):Dan akhirnya, Anda bisa melemparkan yang sudah ada
String
keNSString
seperti di bawah inisumber
[__NSCFString containsString:]: unrecognized selector sent to instance
. Juga, saya tidak dapat menemukan metodecontainsString
dalam dokumen dev untuk mengonfirmasi apakah ini baru untuk iOS 8.Yang lainnya. Mendukung opsi case dan diakritik.
Swift 3.0
Pemakaian
iOS 9+
Fungsi case dan diacritic insensitive tersedia sejak iOS 9.
sumber
Pada Xcode 7.1 dan Swift 2.1
containsString()
bekerja dengan baik untuk saya.Swift 4:
Dan case Swift 4 yang tidak sensitif contoh:
Atau menggunakan
String
ekstensi case sensitif :sumber
import Foundation
, jika tidak, ini tidak akan berhasil.import UIKit
dariimport Foundation
diperlukan, setidaknya dengan iOS 11 dan Swift 4.Dalam Swift 4.2
Menggunakan
Contoh
sumber
> DALAM SWIFT 3.0
Keluaran
sumber
Anda dapat melakukannya dengan sangat mudah di Swift menggunakan kode:
sumber
Hanya tambahan untuk jawaban di sini.
Anda juga dapat melakukan tes tidak sensitif case lokal menggunakan:
Contoh:
MEMPERBARUI
Ini adalah bagian dari Foundation Framework untuk iOS & Mac OS X 10.10.x dan merupakan bagian dari 10.10 pada Saat Posting asli saya.
sumber
Ini adalah tikaman pertamaku di taman bermain cepat ini. Saya memperluas String dengan menyediakan dua fungsi baru (berisi dan berisiIgnoreCase)
Gunakan seperti ini
Saya akan menyambut umpan balik :)
sumber
Dari semua jawaban di sini, saya pikir mereka tidak bekerja, atau mereka sedikit peretasan (kembali ke NSString). Sangat mungkin bahwa jawaban yang benar untuk ini telah berubah dengan rilis beta yang berbeda.
Inilah yang saya gunakan:
"! = Nil" menjadi wajib dengan Beta 5.
sumber
Anda disini:
sumber
Anda tidak perlu menulis kode khusus untuk ini. Mulai dari versi 1.2 Swift telah memiliki semua metode yang Anda butuhkan:
count(string)
;contains(string, substring)
;startsWith(string, substring)
sumber
Dalam Swift 3
sumber
Ini dia! Siap untuk Xcode 8 dan Swift 3.
sumber
string.containsString hanya tersedia di 10.10 Yosemite (dan mungkin iOS8). Juga menjembatani ke crash ObjectiveC di 10.9. Anda mencoba meneruskan NSString ke NSCFString. Saya tidak tahu bedanya, tapi saya bisa mengatakan 10,9 barfs ketika mengeksekusi kode ini dalam aplikasi OS X 10.9.
Berikut perbedaan di Swift dengan 10.9 dan 10.10: https://developer.apple.com/library/prerelease/mac/documentation/General/Reference/APIDiffsMacOSX10_10SeedDiff/index.html contentString hanya tersedia di 10.10
Range of String di atas berfungsi dengan baik pada 10.9. Saya menemukan pengembangan pada 10.9 sangat stabil dengan Xcode beta2. Saya tidak menggunakan taman bermain melalui atau versi baris perintah dari taman bermain. Saya menemukan jika kerangka kerja yang tepat diimpor autocomplete sangat membantu.
sumber
Dengan dan sintaks baru di swift 4 Anda bisa saja
string.contains("Swift 4 is the best")
string adalah variabel string Anda
sumber
Versi Xcode 8 / Swift 3:
Anda juga dapat menggunakan
contains
:sumber
Periksa apakah mengandung 'Hello'
sumber
Swift 4 cara untuk memeriksa substring, termasuk impor kerangka kerja yang diperlukan
Foundation
(atauUIKit
):Kecuali
Foundation
(atauUIKit
) framework diimpor,str.contains("Can")
akan memberikan kesalahan kompiler.Jawaban ini adalah memuntahkan jawaban manojlds , yang sepenuhnya benar. Saya tidak tahu mengapa begitu banyak jawaban melalui begitu banyak masalah untuk buat ulang
Foundation
'sString.contains(subString: String)
metode.sumber
sumber
Swift 3: Di sini Anda dapat melihat ekstensi pencarian pintar saya dari string yang memungkinkan Anda melakukan pencarian pada string untuk melihat apakah mengandung, atau mungkin untuk memfilter koleksi berdasarkan pada teks pencarian.
https://github.com/magonicolas/Swift-Smart-String-Search
sumber
Di iOS 8 dan yang lebih baru, Anda dapat menggunakan dua
NSString
metode ini:sumber
Saya telah menemukan beberapa kasus penggunaan yang menarik. Varian ini menggunakan metode rangeOfString dan saya menyertakan contoh kesetaraan untuk menunjukkan cara terbaik menggunakan fitur pencarian dan perbandingan Strings in Swift 2.0
sumber
Jika Anda ingin memeriksa bahwa satu String berisi Sub-String lain di dalamnya atau tidak, Anda dapat memeriksanya seperti ini juga,
Sekarang, dalam string khusus ini jika Anda ingin tahu apakah itu mengandung nama buah 'apel' atau tidak,
Semoga ini berhasil untuk Anda.
sumber
Anda bisa melakukan apa yang telah Anda sebutkan:
Dari dokumen:
Anda perlu
import Foundation
menjembataniNSString
metode dan membuatnya tersedia untuk kelas String Swift.sumber
SWIFT 4 sangat mudah !!
sumber
$ swift Welcome to Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1). Type :help for assistance. 1> print ("Ping") Ping 2> Print ("Ping") error: repl.swift:2:1: error: use of unresolved identifier 'Print' Print ("Ping") ^~~~~
Dengan memberikan jawaban yang belum diuji yang tidak berhasil. Cetak! = Cetak.