转换String.Index吗?到Int

时间:2019-02-26 02:56:32

标签: swift

通过Swift算法,包括蛮力字符串搜索,即https://github.com/raywenderlich/swift-algorithm-club/tree/master/Brute-Force%20String%20Search

据说输出为7

现在实际上输出是(String.Index?)-尽管我可以下标,但我想实际看到值-7。

代码是

extension String {
  func indexOf(_ pattern: String) -> String.Index? {
    for i in self.characters.indices {
        var j = i
        var found = true
        for p in pattern.characters.indices{
            if j == self.characters.endIndex || self[j] != pattern[p] {
                found = false
                break
            } else {
                j = self.characters.index(after: j)
            }
        }
        if found {
            return i
        }
    }
    return nil
  }
}

我已经看过将String.Index转换为文档中的范围,并且在这里:Convert String.Index to Int or Range<String.Index> to NSRange,但是该问题的答案是旧的,并且不提供Swift 4的答案(如果存在这样的答案)。

距离to也不起作用,

let s = "Hello, World"
let res = ( s.indexOf("World") )
let index: Int = s.startIndex.distance(to: res)
print (s[res!])

并且现有的OffsetIndexableCollection甚至无法编译

那我怎么转换

s.indexOf("World") 

到“ 7”,其中s是“ Hello,World”

1 个答案:

答案 0 :(得分:1)

尝试一下:

s.indexOf("World").encodedOffset ?? -1