我遇到了这个问题......我想在一个常规的for循环中枚举一个条件,反之则另一个条件。像这样:
var enumerator = 0..<length
if(stringPosition == .End) {
enumerator = reverse(enumerator) //[C.Generator.Element] is not convertible to 'Range<Int>'
}
for index in enumerator {
//do stuff
}
我在那里得到了一个不可兑换的错误,并且无法弄清楚如何继续这样做。我尝试过不同的类型转换术,但这种做法并不起作用。
我应该如何理清那里的转换?
答案 0 :(得分:1)
只需转换为Array
即可。
var enumerator = Array(0..<length) // <-- here
if(stringPosition == .End) {
enumerator = reverse(enumerator)
// then, enumerator.reverse() is better, I think
}
for index in enumerator {
//do stuff
}
我认为,更多(记忆)效率的方式就像:
let range = lazy(0..<length)
let enumerator = stringPosition == .End ? SequenceOf(range.reverse()) : SequenceOf(range)
for index in enumerator {
//do stuff
}
SequenceOf
是任何SequenceType
的包装器。您可以使用它将不同的序列类型存储到一个变量中。lazy()
,请参阅this answer或this。