一尘不染

您如何使用String.substringWithRange?(或Ranges如何在Swift中工作?)

swift

我还不能弄清楚如何String在Swift中获取a的子字符串:

var str = “Hello, playground”
func test(str: String) -> String {
 return str.substringWithRange( /* What goes here? */ )
}
test (str)

我无法在Swift中创建范围。在Playground中自动完成并不是超级有帮助-这说明:

return str.substringWithRange(aRange: Range<String.Index>)

我在Swift标准参考库中找不到任何有帮助的东西。这是另一个疯狂的猜测:

return str.substringWithRange(Range(0, 1))

还有这个:

let r:Range<String.Index> = Range<String.Index>(start: 0, end: 2)
return str.substringWithRange(r)

我看过其他答案(在SwiftString中查找字符的索引),似乎暗示着由于String是的桥类型NSString,因此“旧”方法应该起作用,但尚不清楚如何-
例如,这也不起作用(似乎不是有效的语法):

let x = str.substringWithRange(NSMakeRange(0, 3))

有什么想法吗?


阅读 776

收藏
2020-07-07

共1个答案

一尘不染

您可以使用substringWithRange方法。它需要一个开始和结束的String.Index。

var str = "Hello, playground"
str.substringWithRange(Range<String.Index>(start: str.startIndex, end: str.endIndex)) //"Hello, playground"

若要更改开始和结束索引,请使用advancedBy(n)。

var str = "Hello, playground"
str.substringWithRange(Range<String.Index>(start: str.startIndex.advancedBy(2), end: str.endIndex.advancedBy(-1))) //"llo, playgroun"

您还可以将NSString方法与NSRange一起使用,但是必须确保使用的NSString是这样的:

let myNSString = str as NSString
myNSString.substringWithRange(NSRange(location: 0, length: 3))

注意:正如JanX2所述,第二种方法对于unicode字符串并不安全。

2020-07-07