想象一下,我们有一个任意Range<T>
,我们希望创建一个新的范围,startIndex
和endIndex
提升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
,但如果有效的话,我不会感到惊讶。但是,当Int
为T
那么,我该怎么做呢?
答案 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