18

我正在尝试在 Swift 3 中创建一个我在 Swift 2 中已经拥有的范围,但它一直给我这个错误: String may not be indexed with 'Int', it has variable size elements

这是我的代码:

let range = expireRange!.startIndex.advancedBy(n: 7) ..< expireRange!.startIndex.advancedBy(n: 16)

expiredRange 是一个Range<Index>?

在 Swift 2 中,我有:

let range = expireRange!.startIndex.advancedBy(7)...expireRange!.startIndex.advancedBy(16)
4

1 回答 1

40

在 Swift 3 中,“Collections move their index”,请参阅 A New Model for Collections and Indices on Swift evolution。

这是字符串范围和索引的示例:

let string = "ABCDEFG"
if let range = string.range(of: "CDEF") {
    let lo = string.index(range.lowerBound, offsetBy: 1)
    let hi = string.index(range.lowerBound, offsetBy: 3)
    let subRange = lo ..< hi
    print(string[subRange]) // "DE"
}

public func index(_ i: Index, offsetBy n: IndexDistance) -> Index

在字符串上调用方法以计算范围中的新索引(lower/upperBound现在具有属性而不是 start/endIndex)。

于 2016-06-28T08:05:50.643 回答