反转范围会导致类型不匹配

时间:2015-11-04 18:31:50

标签: ios swift for-loop iterable type-mismatch

我想使用变量来保存通常是某个范围的东西,例如let range = aNumber % 2 == 0 ? 0..<10 : (0..<10).reverse() for i in range { /* for loop logic */ } ,这样我就可以使用条件逻辑来更改循环的范围,而无需复制/粘贴for循环。例如:

let range = ...

Result values in '? :' expression have mismatching types 'Range<Int>' and 'ReverseRandomAccessCollection<Range(Int)'将导致错误:let range: SomeType = ...。我会猜测,反转范围会导致相同类型的范围或至少一个协议或两个值都继承/实现的内容,因此我可以声明div { border: 1px solid red; } input { font-size: 10vw; width:50%; } button { height: 100%; width: 40%; }。虽然我找不到。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

您可以使用AnySequence创建“类型删除序列” 它将操作转发到基础序列,隐藏基础SequenceType的具体内容:

let range = aNumber % 2 == 0
            ? AnySequence ( (0 ..< 10) )
            : AnySequence ( (0 ..< 10).reverse() )

for i in range { print(i) }

三元条件运算符中的两个表达式都有 相同类型AnySequence<Int>,因此这是range的类型。

对于Swift 3及更高版本,请将reverse()替换为reversed()