Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 检查数组大小写中是否存在字符串_Swift_Contains - Fatal编程技术网

Swift 检查数组大小写中是否存在字符串

Swift 检查数组大小写中是否存在字符串,swift,contains,Swift,Contains,声明: let listArray = ["kashif"] let word = "kashif" 那么这个 contains(listArray, word) 返回true,但如果声明为: let word = "Kashif" 然后返回false,因为比较区分大小写 如何使此比较不区分大小写 您可以使用 word.lowercaseString 要将字符串转换为所有小写字符,请尝试以下操作: let loword = word.lowercaseString let found

声明:

let listArray = ["kashif"]
let word = "kashif"
那么这个

contains(listArray, word) 
返回true,但如果声明为:

let word = "Kashif"
然后返回false,因为比较区分大小写

如何使此比较不区分大小写

您可以使用

word.lowercaseString 
要将字符串转换为所有小写字符,请尝试以下操作:

let loword = word.lowercaseString
let found = contains(listArray) { $0.lowercaseString == loword }

Xcode 8•Swift 3或更高版本

let list = ["kashif"]
let word = "Kashif"

if list.contains(where: {$0.caseInsensitiveCompare(word) == .orderedSame}) {
    print(true)  // true
}
或者:

if list.contains(where: {$0.compare(word, options: .caseInsensitive) == .orderedSame}) {
    print(true)  // true
}
如果您想知道元素在数组中的位置(它可能会找到多个与谓词匹配的元素):


您还可以使用localizedStandardContains方法,该方法不区分大小写和重音:

func localizedStandardContains<T>(_ string: T) -> Bool where T : StringProtocol
我的例子

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()
}

要检查数组中是否存在字符串(不区分大小写),请使用

listArray.localizedCaseInsensitiveContainsString(word) 
其中listArray是数组的名称 word是您搜索的文本

此代码适用于Swift 2.2

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"                                             
}

这比其他答案更好b/c你在数组中有对象的索引,因此你可以抓取对象并做任何你想做的事情:)

Swift 4

只需使所有内容(查询和结果)不区分大小写即可

for item in listArray {
    if item.lowercased().contains(word.lowercased()) {
        searchResults.append(item)
    }
}

用于检查具有更多选项的数组中是否存在字符串(不区分大小写,锚定/搜索仅限于开始)

利用基础
扩展@Govind Kumawat的答案

word
中的
searchString
的简单比较如下:

word.range(of: searchString, options: .caseInsensitive) != nil
作为职能:

func containsCaseInsensitive(searchString: String, in string: String) -> Bool {
    return string.range(of: searchString, options: .caseInsensitive) != nil
}

func containsCaseInsensitive(searchString: String, in array: [String]) -> Bool {
    return array.contains {$0.range(of: searchString, options: .caseInsensitive) != nil}
}

func caseInsensitiveMatches(searchString: String, in array: [String]) -> [String] {
    return array.compactMap { string in
        return string.range(of: searchString, options: .caseInsensitive) != nil
            ? string
            : nil
    }
}

swift 5、swift 4.2,使用以下代码

let list = ["kAshif"]
let word = "Kashif"

if list.contains(where: { $0.caseInsensitiveCompare(word) == .orderedSame }) {
    print("contains is true")
}

您可以添加扩展名:

斯威夫特5

extension Array where Element == String {
    func containsIgnoringCase(_ element: Element) -> Bool {
        contains { $0.caseInsensitiveCompare(element) == .orderedSame }
    }
}
然后像这样使用它:

["tEst"].containsIgnoringCase("TeSt") // true

请编辑更多信息。不鼓励只编写代码和“试试这个”答案,因为它们不包含可搜索的内容,也不解释为什么有人应该“试试这个”
localizedCaseInsensitiveContainsString
似乎是
NSString
中的一种方法。但我不喜欢它的方法签名。也许
containsSigningCase
是更好的命名方式。@AechoLiu我更喜欢containsCaseSensitive或CaseSensitiveContains。顺便说一句,你可以实施你自己的@Leo谢谢你的建议。我现在用Swift。我喜欢.contains()在这里应该是equals()。这取决于您希望搜索的工作方式。对于搜索查询,我更喜欢contains。请注意,它可能会出现多次,这将只为您提供第一个索引。
let list = ["kAshif"]
let word = "Kashif"

if list.contains(where: { $0.caseInsensitiveCompare(word) == .orderedSame }) {
    print("contains is true")
}
extension Array where Element == String {
    func containsIgnoringCase(_ element: Element) -> Bool {
        contains { $0.caseInsensitiveCompare(element) == .orderedSame }
    }
}
["tEst"].containsIgnoringCase("TeSt") // true