如何在Swift中检查字符串是否包含另一个字符串?
如何在Swift中检查字符串是否包含另一个字符串?
在 Objective-C 中,检查 NSString 中的子串的代码是:
NSString *string = @"hello Swift"; NSRange textRange =[string rangeOfString:@"Swift"]; if(textRange.location != NSNotFound) { NSLog(@"exists"); }
。但是在 Swift 中该怎么做呢?
admin 更改状态以发布 2023年5月22日
扩展方式
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
你可以使用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
脚注
- 只要记住,在字符串上使用集合函数会有一些边缘情况,这可能会给您带来意外的结果,例如处理表情符号或其他音节集群,如带重音的字母时。