Я могу легко перебирать элементы закрытого диапазона. То же самое для элементов reversed()
закрытого диапазона. Тем не менее, эти две конструкции имеют разные типы, такие как ClosedRange<Int>
для первого и ReverseCollection<ClosedRange<Int>>
.
Предположим, мне нужна какая-то коллекция (например, массив), включающая в себя как диапазоны, так и обратные диапазоны: как бы я go об этом?
Пример:
let aaa = 1...3
let bbb = (4...6).reversed()
let ranges = [aaa,bbb] // heterogeneous collection literal could only be inferred of type '[Any]'
for range in ranges {
for item in range {
print(item)
}
}
Простое объявление ranges
типа [Sequence]
или [Collection]
не работает, потому что " Протокол «Последовательность» может использоваться только в качестве общего ограничения c, поскольку он имеет требования к «Я» или связанные с ним типы ».