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

其他回答

Xcode 8/Swift 3版本:

let string = "hello Swift"

if let range = string.range(of: "Swift") {
    print("exists at range \(range)")
} else {
    print("does not exist")
}

if let lowercaseRange = string.lowercased().range(of: "swift") {
    print("exists at range \(lowercaseRange)")
} else {
    print("does not exist")
}

你也可以使用contains:

string.contains("swift") // false
string.contains("Swift") // true

你可以按照你刚才提到的去做:

import Foundation
...
string.contains("Swift");

从文档中可以看出:

Swift的String类型无缝地桥接到Foundation的NSString 类。如果您正在使用Cocoa中的Foundation框架或 Cocoa Touch,整个NSString API可以调用任何 您所创建的字符串值,以及所描述的字符串特性 在本章中。你也可以在任何API中使用String值 需要一个NSString实例。

你需要导入Foundation来桥接NSString方法,并使它们对Swift的String类可用。

Swift 3:在这里你可以看到我的智能搜索扩展从字符串,让你对字符串进行搜索,看看它是否包含,或者可能过滤一个基于搜索文本的集合。

https://github.com/magonicolas/Swift-Smart-String-Search

这只是对答案的补充。

你也可以使用以下方法进行本地不区分大小写的测试:

 - (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中使用代码做到这一点:

let string = "hello Swift";
let subString = (string as NSString).containsString("Swift")
if(subString){println("Exist")}