如何在Swift中检查字符串是否包含另一个字符串?

58 浏览
0 Comments

如何在Swift中检查字符串是否包含另一个字符串?

在 Objective-C 中,检查 NSString 中的子串的代码是:

NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
    NSLog(@"exists");
}

。但是在 Swift 中该怎么做呢?

admin 更改状态以发布 2023年5月22日
0
0 Comments

扩展方式

Swift 4

extension String {
    func contains(find: String) -> Bool{
        return self.range(of: find) != nil
    }
    func containsIgnoringCase(find: String) -> Bool{
        return self.range(of: find, options: .caseInsensitive) != nil
    }
}
var value = "Hello world"
print(value.contains("Hello")) // true
print(value.contains("bo"))    // false
print(value.containsIgnoringCase(find: "hello"))    // true
print(value.containsIgnoringCase(find: "Hello"))    // true
print(value.containsIgnoringCase(find: "bo"))       // false


通常Swift 4提供了contains方法,但它仅适用于iOS 8.0以上版本。


Swift 3.1

您可以为String编写contains:containsIgnoringCase的扩展。

extension String { 
   func contains(_ find: String) -> Bool{
     return self.range(of: find) != nil
   }
   func containsIgnoringCase(_ find: String) -> Bool{
     return self.range(of: find, options: .caseInsensitive) != nil 
   }
 }


早期Swift版本

extension String {
    func contains(find: String) -> Bool{
       return self.rangeOfString(find) != nil
     }
    func containsIgnoringCase(find: String) -> Bool{
       return self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
     }
}


示例:

var value = "Hello world"
print(value.contains("Hello")) // true
print(value.contains("bo"))    // false
print(value.containsIgnoringCase("hello"))    // true
print(value.containsIgnoringCase("Hello"))    // true
print(value.containsIgnoringCase("bo"))       // false

0
0 Comments

你可以使用Swift进行完全相同的调用:

Swift 4和Swift 5

在Swift 4中,字符串是字符值的集合,而在Swift 2和3中不是这样的,因此您可以使用此更简洁的代码1:

let string = "hello Swift"
if string.contains("Swift") {
    print("exists")
}

Swift 3.0+

var string = "hello Swift"
if string.range(of:"Swift") != nil { 
    print("exists")
}
// alternative: not case sensitive
if string.lowercased().range(of:"swift") != nil {
    print("exists")
}

旧版本的Swift

var string = "hello Swift"
if string.rangeOfString("Swift") != nil{ 
    println("exists")
}
// alternative: not case sensitive
if string.lowercaseString.rangeOfString("swift") != nil {
    println("exists")
}

我希望这是一个有用的解决方案,因为一些人,包括我,在调用containsString()时遇到了一些奇怪的问题。1

PS。不要忘记导入Foundation

脚注

  1. 只要记住,在字符串上使用集合函数会有一些边缘情况,这可能会给您带来意外的结果,例如处理表情符号或其他音节集群,如带重音的字母时。
0