提问者:小点点

快速启动方法?


Swift中是否存在startsAnd()方法或类似的东西?

我基本上是想检查某个字符串是否以另一个字符串开始。我也希望它不区分大小写。

正如你可能知道的,我只是想做一个简单的搜索功能,但我似乎在这方面失败得很惨。

这是我想要的:

输入“sa”应该会给出“圣安东尼奥”、“圣达菲”等的结果。输入“sa”或“sa”甚至“sa”也应该返回“圣安东尼奥”或“圣达菲”。

我当时在用

self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil 

在iOS9之前,它工作得很好。然而,升级到iOS9后,它停止工作,现在搜索区分大小写。

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

共3个答案

匿名用户

使用hasPrefix而不是startsFor

例子:

"hello dolly".hasPrefix("hello")  // This will return true
"hello dolly".hasPrefix("abc")    // This will return false

匿名用户

下面是startsWith的快速扩展实现:

extension String {

  func startsWith(string: String) -> Bool {

    guard let range = rangeOfString(string, options:[.AnchoredSearch, .CaseInsensitiveSearch]) else {
      return false
    }

    return range.startIndex == startIndex
  }

}

用法示例:

var str = "Hello, playground"

let matches    = str.startsWith("hello") //true
let no_matches = str.startsWith("playground") //false

匿名用户

要回答不区分大小写的前缀匹配问题,请执行以下操作:

extension String {
    func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
        return lowercased().hasPrefix(prefix.lowercased())
    }
}

或:

extension String {
    func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
        return lowercased().starts(with: prefix.lowercased())
    }
}

注意:对于空前缀两种实现都将返回true

extension String {
    func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
        return range(of: prefix, options: [.anchored, .caseInsensitive]) != nil
    }
}

注意:对于空前缀它将返回false

extension String {
    func caseInsensitiveHasPrefix(_ prefix: String) -> Bool {
        guard let expression = try? NSRegularExpression(pattern: "\(prefix)", options: [.caseInsensitive, .ignoreMetacharacters]) else {
            return false
        }
        return expression.firstMatch(in: self, options: .anchored, range: NSRange(location: 0, length: characters.count)) != nil
    }
}

注意:对于空前缀它将返回false