是时候承认失败了……
在Objective-C中,我可以使用如下内容:
NSString* str = @"abcdefghi";
[str rangeOfString:@"c"].location; // 2
在Swift中,我看到了类似的东西:
var str = "abcdefghi"
str.rangeOfString("c").startIndex
...但这只是给了我一个字符串。索引,我可以使用它下标回原始字符串,但不能从中提取位置。
FWIW,字符串。Index有一个名为_position的私有ivar,其中有正确的值。我只是不明白怎么会暴露出来。
我知道我自己可以很容易地将其添加到String中。我更好奇在这个新的API中我缺少了什么。
// Using Swift 4, the code below works.
// The problem is that String.index is a struct. Use dot notation to grab the integer part of it that you want: ".encodedOffset"
let strx = "0123456789ABCDEF"
let si = strx.index(of: "A")
let i = si?.encodedOffset // i will be an Int. You need "?" because it might be nil, no such character found.
if i != nil { // You MUST deal with the optional, unwrap it only if not nil.
print("i = ",i)
print("i = ",i!) // "!" str1ps off "optional" specification (unwraps i).
// or
let ii = i!
print("ii = ",ii)
}
// Good luck.