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

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

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


当前回答

这只是对答案的补充。

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

 - (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;

其他回答

您不需要为此编写任何定制代码。从1.2版本开始,Swift已经有了所有你需要的方法:

获取字符串长度:count(string); 检查字符串是否包含子字符串:contains(字符串,子字符串); 检查字符串是否以substring开头:startsWith(string, substring) 等。

这是我在快速操场上的第一次尝试。 我通过提供两个新函数(contains和containsIgnoreCase)来扩展String

extension String {
    func contains(other: String) -> Bool{
        var start = startIndex

        do{
            var subString = self[Range(start: start++, end: endIndex)]
            if subString.hasPrefix(other){
                return true
            }

        }while start != endIndex

        return false
    }

    func containsIgnoreCase(other: String) -> Bool{
        var start = startIndex

        do{
            var subString = self[Range(start: start++, end: endIndex)].lowercaseString
            if subString.hasPrefix(other.lowercaseString){
                return true
            }

        }while start != endIndex

        return false
    }
}

像这样使用它

var sentence = "This is a test sentence"
sentence.contains("this")  //returns false
sentence.contains("This")  //returns true
sentence.containsIgnoreCase("this")  //returns true

"This is another test sentence".contains(" test ")    //returns true

我欢迎任何反馈:)

SWIFT 4非常简单!!

if (yourString.contains("anyThing")) {
   print("Exist")
}

给你!准备Xcode 8和Swift 3。

import UIKit

let mString = "This is a String that contains something to search."
let stringToSearchUpperCase = "String"
let stringToSearchLowerCase = "string"

mString.contains(stringToSearchUpperCase) //true
mString.contains(stringToSearchLowerCase) //false
mString.lowercased().contains(stringToSearchUpperCase) //false
mString.lowercased().contains(stringToSearchLowerCase) //true

我发现了一些有趣的用例。这些变体利用了rangeOfString方法,我包括了相等的例子,以展示如何最好地使用Swift 2.0中string的搜索和比较功能

//In viewDidLoad() I assign the current object description (A Swift String) to self.loadedObjectDescription
self.loadedObjectDescription = self.myObject!.description

在我改变了自我之后。myObject,我可以引用 下面的字符串比较例程(设置为惰性变量 返回Bool类型)。这使得人们可以在任何时候检查状态。

lazy var objectHasChanges : Bool = {
        guard self.myObject != nil else { return false }
        return !(self.loadedObjectDescription == self.myObject!.description)
    }()

当我需要分析一个缺失时,这种情况也会发生 属性。字符串搜索允许我找到 特定的子字符串被设置为nil(创建对象时的默认值)。

    lazy var isMissingProperty : Bool = {
        guard self.myObject != nil else { return true }
        let emptyPropertyValue = "myProperty = nil"
        return (self.myObject!.description.rangeOfString(emptyPropertyValue) != nil) ? true : false
    }()