在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中做到这一点呢?
当前回答
给你!准备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
其他回答
在这里的所有答案中,我认为它们要么不工作,要么有点hack(转换回NSString)。这个问题的正确答案很可能随着不同的beta版本而改变。
以下是我使用的方法:
let string: String = "hello Swift"
if string.rangeOfString("Swift") != nil
{
println("exists")
}
”!= nil”成为Beta 5的要求。
你可以用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.别忘了导入粉底
脚注
只要记住,在字符串上使用集合函数有一些边缘情况,可能会给你意想不到的结果,例如在处理表情符号或其他字母群(如重音字母)时。
从文档中可以看出,在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")
}
检查它是否包含“Hello”
let s = "Hello World"
if s.rangeOfString("Hello") != nil {
print("Yes it contains 'Hello'")
}
你可以按照你刚才提到的去做:
import Foundation
...
string.contains("Swift");
从文档中可以看出:
Swift的String类型无缝地桥接到Foundation的NSString 类。如果您正在使用Cocoa中的Foundation框架或 Cocoa Touch,整个NSString API可以调用任何 您所创建的字符串值,以及所描述的字符串特性 在本章中。你也可以在任何API中使用String值 需要一个NSString实例。
你需要导入Foundation来桥接NSString方法,并使它们对Swift的String类可用。