是时候承认失败了……
在Objective-C中,我可以使用如下内容:
NSString* str = @"abcdefghi";
[str rangeOfString:@"c"].location; // 2
在Swift中,我看到了类似的东西:
var str = "abcdefghi"
str.rangeOfString("c").startIndex
...但这只是给了我一个字符串。索引,我可以使用它下标回原始字符串,但不能从中提取位置。
FWIW,字符串。Index有一个名为_position的私有ivar,其中有正确的值。我只是不明白怎么会暴露出来。
我知道我自己可以很容易地将其添加到String中。我更好奇在这个新的API中我缺少了什么。
仔细想想,你其实并不需要位置的确切Int版本。范围甚至是字符串。如果需要,Index足以再次获取子字符串:
let myString = "hello"
let rangeOfE = myString.rangeOfString("e")
if let rangeOfE = rangeOfE {
myString.substringWithRange(rangeOfE) // e
myString[rangeOfE] // e
// if you do want to create your own range
// you can keep the index as a String.Index type
let index = rangeOfE.startIndex
myString.substringWithRange(Range<String.Index>(start: index, end: advance(index, 1))) // e
// if you really really need the
// Int version of the index:
let numericIndex = distance(index, advance(index, 1)) // 1 (type Int)
}