在Objective-C中,检查NSString子字符串的代码是:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
但是如何在Swift中做到这一点呢?
在Objective-C中,检查NSString子字符串的代码是:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
但是如何在Swift中做到这一点呢?
当前回答
从文档中可以看出,在String对象上调用containsString()应该可以工作:
Swift的String类型无缝地桥接到Foundation的NSString 类。如果您正在使用Cocoa中的Foundation框架或 Cocoa Touch,整个NSString API可以调用任何 您所创建的字符串值,以及所描述的字符串特性 在本章中。你也可以在任何API中使用String值 需要一个NSString实例。
然而,事情似乎并不是这样的。
如果你尝试使用someString.containsString(anotherString),你会得到一个编译时错误,说明'String'不包含名为'containsString'的成员。
所以,你剩下几个选项,其中一个是通过使用bridgetooobjecvec()显式地将你的String桥接到Objective-C,其他两个涉及显式地使用NSString,最后一个涉及将String转换为NSString
通过桥接,你会得到:
var string = "hello Swift"
if string.bridgeToObjectiveC().containsString("Swift") {
println("YES")
}
通过显式地将字符串输入为NSString,你会得到:
var string: NSString = "hello Swift"
if string.containsString("Swift") {
println("YES")
}
如果你有一个已经存在的String,你可以使用NSString(String:)初始化一个NSString:
var string = "hello Swift"
if NSString(string: string).containsString("Swift") {
println("YES")
}
最后,你可以将一个现有的String转换为NSString,如下所示
var string = "hello Swift"
if (string as NSString).containsString("Swift") {
println("YES")
}
其他回答
扩展的方法
斯威夫特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有包含方法,但它可从iOS 8.0+
斯威夫特3.1
你可以为字符串写扩展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
在iOS 8和更新版本中,你可以使用这两个NSString方法:
@availability(iOS, introduced=8.0)
func containsString(aString: String) -> Bool
@availability(iOS, introduced=8.0)
func localizedCaseInsensitiveContainsString(aString: String) -> Bool
另一个。支持大小写和变音符。
斯威夫特3.0
struct MyString {
static func contains(_ text: String, substring: String,
ignoreCase: Bool = true,
ignoreDiacritic: Bool = true) -> Bool {
var options = NSString.CompareOptions()
if ignoreCase { _ = options.insert(NSString.CompareOptions.caseInsensitive) }
if ignoreDiacritic { _ = options.insert(NSString.CompareOptions.diacriticInsensitive) }
return text.range(of: substring, options: options) != nil
}
}
使用
MyString.contains("Niels Bohr", substring: "Bohr") // true
iOS 9 +
iOS 9开始提供大小写和变音符不敏感功能。
if #available(iOS 9.0, *) {
"Für Elise".localizedStandardContains("fur") // true
}
这只是对答案的补充。
你也可以使用以下方法进行本地不区分大小写的测试:
- (BOOL)localizedCaseInsensitiveContainsString:(NSString *)aString
例子:
import Foundation
var string: NSString = "hello Swift"
if string.localizedCaseInsensitiveContainsString("Hello") {
println("TRUE")
}
更新
这是iOS和Mac OS X 10.10.x基础框架的一部分 在我最初发布的时候,它是10.10的一部分。
文档生成日期:2014-06-05 12:26:27 -0700 OS X版本说明 版权所有©2014苹果公司版权所有。 OS X 10.10发布说明Cocoa基础框架 NSString现在有以下两个方便的方法: - (BOOL)containsString:(NSString *)str; - (BOOL)localizedCaseInsensitiveContainsString:(NSString *)str;
Swift 3:在这里你可以看到我的智能搜索扩展从字符串,让你对字符串进行搜索,看看它是否包含,或者可能过滤一个基于搜索文本的集合。
https://github.com/magonicolas/Swift-Smart-String-Search