Sequence

Sequence는 프로토콜이다.

Swift의 대표적인 타입들인 Array, Set, Dictionary같은 타입들은 Collection 프로토콜을 채택하는데 Collection프로토콜은 Sequence프토콜을 채택한다.

Sequence프로토콜을 채택하는 타입의 가장큰 이점은 Iterable하다는 것이다.

→ for in문에 사용 가능하다.

Sequence프토콜은 makeIterator매서드를 요구한다.

해당 매서드는 IteratorProtocol을 채택하는 타입을 반환해야한다.

struct MySequence: Sequence {
    func makeIterator() -> some IteratorProtocol {
	       ...
    }
}

구현하는 타입이 IteratorProtocol을 직접 채택한 경우에는 해당 매서드는 요구사항에서 배재된다.

struct MySequence: Sequence, IteratorProtocol {
    
    var value = 0
    
    mutating func next() -> Int? {
        if value > 10 {
            return nil
        }
        value+=1
        
        return value
    }
}

for in을 사용하여 순회해 보았습니다.

struct MySequence: Sequence, IteratorProtocol {
    
    var value = 0
    
    mutating func next() -> Int? {
        if value >= 10 {
            return nil
        }
        value+=1
        
        return value
    }
}

var ins = MySequence()

for i in ins {
    print(i)
}