如何在Swift中偏移Range <t>?</t>

时间:2015-01-31 16:52:38

标签: swift

想象一下,我们有一个任意Range<T>,我们希望创建一个新的范围,startIndexendIndex提升50个单位。

我的第一个想法是这样做:

let startIndex = advance(range.startIndex, 50)
let endIndex = advance(range.endIndex, 50)
var newRange = startIndex..<endIndex

但这会给出&#34;致命错误:无法增加endIndex&#34;。 (好吧,它与Range<String.Index>有关。我还没有尝试过其他通用参数。)我已经尝试过相当多的排列,包括分配range.startIndex和{{1没有任何作用。

让我强调,我正在寻找适用于任何 range.endIndex的解决方案。 GoZoner给出了一个答案,我没有尝试T,但如果有效的话,我不会感到惊讶。但是,当IntT

时,我尝试过的任何排列都无效

那么,我该怎么做呢?

2 个答案:

答案 0 :(得分:3)

advance的第二个版本,其最大索引不会超出:

let s = "Hello, I must be going."
let range = s.startIndex..<s.endIndex

let startIndex = advance(range.startIndex, 50, s.endIndex)
let endIndex = advance(range.endIndex, 50, s.endIndex)
var newRange = startIndex..<endIndex

if newRange.isEmpty {
    println("new range out of bounds")
}

答案 1 :(得分:0)

尝试:

  1> var r1 = 1..<50
  r1: Range<Int> = 1..<50

  2> var r2 = (r1.startIndex+50)..<(r1.endIndex+50)
  r2: Range<Int> = 51..<100