Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public struct CycleIterator <Base: Sequence>: IteratorProtocol {
- public typealias Element = Base.Element
- private var sequence: Base
- private var iterator: Base.Iterator
- internal init (_ sequence: Base) {
- self.sequence = sequence
- self.iterator = self.sequence.makeIterator()
- }
- public mutating func next () -> Element? {
- var next = self.iterator.next()
- if next == nil {
- self.iterator = self.sequence.makeIterator()
- next = self.iterator.next()
- }
- return next
- }
- }
- public struct LazyCycleSequence <Base: LazySequenceProtocol>: LazySequenceProtocol {
- public typealias Iterator = CycleIterator<Base>
- public typealias Element = Iterator.Element
- private let base: Base
- internal init (_ base: Base) {
- self.base = base
- }
- public func makeIterator () -> Iterator {
- return Iterator(self.base)
- }
- }
- public extension LazySequenceProtocol {
- func cycle () -> LazyCycleSequence<Self> {
- return LazyCycleSequence(self)
- }
- }
- print(type(of: [1, 2, 3].lazy.cycle().prefix(5))) // AnySequence<Int>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement