我想使用变量来保存通常是某个范围的东西,例如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%;
}
。虽然我找不到。有什么想法吗?
答案 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()
。