反转范围会导致不匹配的types
我想使用一个variables来保存通常是某个范围的东西,例如Range<Int>
,这样我就可以使用条件逻辑来改变循环的范围而不需要复制/粘贴for循环。 例如:
let range = aNumber % 2 == 0 ? 0..<10 : (0..<10).reverse() for i in range { /* for loop logic */ }
行let range = ...
将导致错误: Result values in '? :' expression have mismatching types 'Range<Int>' and 'ReverseRandomAccessCollection<Range(Int)'
Result values in '? :' expression have mismatching types 'Range<Int>' and 'ReverseRandomAccessCollection<Range(Int)'
。 我会猜测,反转范围将导致相同types的范围或至less一个协议或两个值inheritance/实现的东西,所以我可以声明let range: SomeType = ...
虽然我一直没有find。 有任何想法吗?
您可以使用AnySequence
创build一个“types擦除序列”,将操作转发到基础序列,隐藏基础SequenceType
的细节:
let range = aNumber % 2 == 0 ? AnySequence ( (0 ..< 10) ) : AnySequence ( (0 ..< 10).reverse() ) for i in range { print(i) }
三元条件运算符中的两个expression式都具有相同的typesAnySequence<Int>
,所以这是range
的types。
对于Swift 3和更高版本,用reverse()
replacereverse()
reversed()
。