宣言:
let listArray = ["kashif"]
let Word = "kashif"
それからこれ
contains(listArray, Word)
Trueを返しますが、宣言が次の場合:
let Word = "Kashif"
比較では大文字と小文字が区別されるため、falseを返します。
この比較の大文字と小文字を区別しないようにするにはどうすればよいですか?
使用できます
Word.lowercaseString
文字列をすべて小文字に変換する
let list = ["kashif"]
let Word = "Kashif"
if contains(list, {$0.caseInsensitiveCompare(Word) == NSComparisonResult.OrderedSame}) {
println(true) // true
}
Xcode 7.3.1•Swift 2.2.1
if list.contains({$0.caseInsensitiveCompare(Word) == .OrderedSame}) {
print(true) // true
}
Xcode 8•Swift 3以降
if list.contains(where: {$0.caseInsensitiveCompare(Word) == .orderedSame}) {
print(true) // true
}
代わりに:
if list.contains(where: {$0.compare(Word, options: .caseInsensitive) == .orderedSame}) {
print(true) // true
}
配列内の要素の位置を知りたい場合(述語に一致する要素が複数見つかる場合があります):
let indices = list.indices.filter { list[$0].caseInsensitiveCompare(Word) == .orderedSame }
print(indices) // [0]
文字列が配列に存在するかどうかを確認するには(大文字と小文字を区別せずに)、使用してください
listArray.localizedCaseInsensitiveContainsString(Word)
listArrayは配列の名前で、Wordは検索されたテキストです
このコードはSwift 2.2で動作します
これを試して:
let loword = Word.lowercaseString
let found = contains(listArray) { $0.lowercaseString == loword }
Swift 4
すべて(クエリと結果)の大文字と小文字を区別しないようにします。
for item in listArray {
if item.lowercased().contains(Word.lowercased()) {
searchResults.append(item)
}
}
Swift 3.0:
文字列配列で大文字と小文字を区別しない文字列を見つけるのは素晴らしいことですが、インデックスがない場合は、特定の状況ではクールになりません。
ここに私の解決策があります:
let stringArray = ["FOO", "bar"]()
if let index = stringArray.index(where: {$0.caseInsensitiveCompare("foo") == .orderedSame}) {
print("STRING \(stringArray[index]) FOUND AT INDEX \(index)")
//prints "STRING FOO FOUND AT INDEX 0"
}
これは、配列内のオブジェクトのインデックスを持っている他の答えよりも優れているので、オブジェクトをつかんで、何でもできます:)
複数のOptionsを持つ配列に文字列が存在するかどうかを確認するために(caseInsensitive、アンカー/検索は開始に制限されます)
range(of:options:)
let list = ["kashif"]
let Word = "Kashif"
if list.contains(where: {$0.range(of: Word, options: [.caseInsensitive, .anchored]) != nil}) {
print(true) // true
}
if let index = list.index(where: {$0.range(of: Word, options: [.caseInsensitive, .anchored]) != nil}) {
print("Found at index \(index)") // true
}
私の例
func updateSearchResultsForSearchController(searchController: UISearchController) {
guard let searchText = searchController.searchBar.text else { return }
let countries = Countries.getAllCountries()
filteredCountries = countries.filter() {
return $0.name.containsString(searchText) || $0.name.lowercaseString.containsString(searchText)
}
self.tableView.reloadData()
}