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)
}