Sequence
Sequence は、要素に対する走査が可能な型に適合させるプロトコル。主要なプロトコルは IteratorProtocol と Sequence プロトコルの2つで、コードを確認しにいくと以下のように定義されている。 code:swift
public protocol IteratorProtocol {
/// Iteratorによって走査される要素
associatedtype Element
/// 次の要素を返す。存在しなければnilを返す
mutating func next() -> Element?
}
public protocol Sequence {
/// Sequenceの要素の型
associatedtype Element
/// 状態をカプセル化したSequenceのIterationインタフェース
associatedtype Iterator: IteratorProtocol where Iterator.Element == Element
/// Sequenceの要素に対するIteratorを返す
__consuming func makeIterator() -> Iterator
/// 以下略
}
Sequence に適合している型は、例えば一般的な Collection 型だが、それらに対し、for - in 文を利用しないでループを実現する例が、上記クラスのコメントにも記載されている。その内容は以下になる。
makeIterator() で Iterator を返し、それを next() で走査する。要素がなくなった場合は nil が返ってくるので、そこでループが終了する。
code:swift
var numbersIterator = numbers.makeIterator()
while let num = numbersIterator.next() {
print(num)
}
// Prints "2"
// Prints "3"
// Prints "5"
// Prints "7"
Sequence に準拠することで、for-in 文によるイテレーションが簡単にできる上に、以下のような便利な関数が利用できる。 contains
forEach
map
filter
reduce