Sequence 协议为类型提供了迭代访问的能力,凡是实现了 Sequence 的类型,都快进行迭代访问,即使用for-in
语句进行访问,标准库中的Array
, Dictionary
, Set
等类型都实现了 Sequence 协议。下面介绍一下自定义类型如何实现 Sequence 协议。
实现 Sequence 协议的集合有以下两个特点:
- 集合的个数可以是有限的也可以是无限的
- 只能迭代一次
1 | struct Countdown: Sequence, IteratorProtocol { |
使用的时候就可以使用for-in
语句:
1 | let threeToGo = Countdown(count: 3) |
对于更为复杂的例子,需要实现自定义的Iterator
,下面的例子中实现了一个自定义的链表,并且自定义了迭代器LinkedListIterator
,这样链表就可以使用for-in
语句进行访问
1 | class LinkedList<E: Equatable> { |
参考资料:
Sequence
Everything You Ever Wanted to Know on Sequence & Collection