Ошибка в том, что Int
не является Sequence
. Вы можете создать диапазон, как уже предлагалось, который соответствует последовательности и позволяет выполнять итерацию с использованием for in
.
Один из способов привести Int
в соответствие с последовательностью:
extension Int: Sequence {
public func makeIterator() -> CountableRange<Int>.Iterator {
return (0..<self).makeIterator()
}
}
Что затем позволило бы использовать его как последовательность с for in
.
for i in 5 {
print(i)
}
но я бы не рекомендовал этого делать. Это только для того, чтобы продемонстрировать мощь протоколов, но, вероятно, это может привести к путанице в реальной кодовой базе.
Из вашего примера похоже, что вы пытаетесь сравнить последовательные элементы коллекции. Пользовательский итератор может сделать именно это, сохраняя при этом достаточно читаемый код:
public struct ConsecutiveSequence<T: IteratorProtocol>: IteratorProtocol, Sequence {
private var base: T
private var index: Int
private var previous: T.Element?
init(_ base: T) {
self.base = base
self.index = 0
}
public typealias Element = (T.Element, T.Element)
public mutating func next() -> Element? {
guard let first = previous ?? base.next(), let second = base.next() else {
return nil
}
previous = second
return (first, second)
}
}
extension Sequence {
public func makeConsecutiveIterator() -> ConsecutiveSequence<Self.Iterator> {
return ConsecutiveSequence(self.makeIterator())
}
}
который можно использовать как:
for (x, y) in [1,2,3,4].makeConsecutiveIterator() {
if (x < y) {
print(x)
}
}
В приведенном выше примере итератор пройдется по следующим парам:
(1, 2)
(2, 3)
(3, 4)
person
Anurag
schedule
06.02.2017
numbers.count - 1
это не последовательность, это целое число. Так что это не может быть повторено. Вам нужно что-то вродеfor number in numbers
. кстати что это за язык? - person Nic   schedule 06.02.2017for index in numbers.indices {
Кстати, вам нужно проверить, есть ли другой элемент после фактического индексаif index + 1 < numbers.count {
, прежде чем пытаться получить доступ к следующему элементу в вашем массиве. - person Leo Dabus   schedule 06.02.2017