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

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

但是如何在Swift中做到这一点呢?


当前回答

有了swift 4的新语法,你就可以

字符串。包含(“Swift 4是最好的”)

String是你的字符串变量

其他回答

字符串。containsString只在10.10 Yosemite(可能还有iOS8)中可用。 而且在10.9中将它连接到objecvec也会崩溃。你试图传递一个NSString到NSCFString。我不知道区别,但我可以说10.9在OS X 10.9应用程序中执行这段代码时呕吐。

以下是Swift与10.9和10.10的不同之处: https://developer.apple.com/library/prerelease/mac/documentation/General/Reference/APIDiffsMacOSX10_10SeedDiff/index.html containsString仅在10.10中可用

上面的String范围在10.9上工作得很好。我发现在10.9上开发Xcode beta2非常稳定。我不使用游乐场的命令行版本。我发现如果导入了合适的框架,自动补全功能是非常有用的。

在Xcode 7.1和Swift 2.1中,containsString()为我工作得很好。

let string = "hello swift"
if string.containsString("swift") {
    print("found swift")
}

斯威夫特4:

let string = "hello swift"
if string.contains("swift") {
    print("found swift")
}

一个不区分大小写的Swift 4示例:

let string = "Hello Swift"
if string.lowercased().contains("swift") {
    print("found swift")
}

或者使用不区分大小写的字符串扩展名:

extension String {
    func containsIgnoreCase(_ string: String) -> Bool {
        return self.lowercased().contains(string.lowercased())
    }
}

let string = "Hello Swift"
let stringToFind = "SWIFT"
if string.containsIgnoreCase(stringToFind) {
    print("found: \(stringToFind)")  // found: SWIFT
}
print("string: \(string)")
print("stringToFind: \(stringToFind)")

// console output:
found: SWIFT
string: Hello Swift
stringToFind: SWIFT

你可以用Swift做同样的事情:

斯威夫特&斯威夫特

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

年长的迅速

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.别忘了导入粉底

脚注

只要记住,在字符串上使用集合函数有一些边缘情况,可能会给你意想不到的结果,例如在处理表情符号或其他字母群(如重音字母)时。

>在swift 3.0

let str = "Hello Swift"
if str.lowercased().contains("Swift".lowercased()) {
    print("String Contains Another String")
} else {
    print("Not Exists")
}

输出

String Contains Another String

扩展的方法

斯威夫特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