😺
【Swift】カスタムSequenceでCounterを作る
はじめに
記事の要約
- Sequenceプロトコルに準拠したカスタムの型を定義することで、柔軟な
for-in
ループが実現できる - カスタムSequenceを
for-in
ループやwhile
で使用する方法
環境
- Xcode 16.0
- Swift 6.0
カスタムSequence
0からhowHigh
までを順番にカウントアップするカスタムSequenceです。
struct Counter: Sequence {
// カウントの上限
let howHigh: Int
struct Iterator: IteratorProtocol {
var value: Int = 0
let howHigh: Int
mutating func next() -> Int? {
guard value <= howHigh else { return nil }
defer { value += 1 }
return value
}
}
func makeIterator() -> Iterator {
Iterator(howHigh: howHigh)
}
}
for-in
での使用
// カスタムSequenceをfor-inループで利用
for counter in Counter(howHigh: 10) {
print(counter)
}
Output
0
1
2
3
4
5
6
7
8
9
10
while
での使用
// カスタムSequenceをwhileで利用
var iterator = Counter(howHigh: 10).makeIterator()
while let next = iterator.next() {
print(next)
}
Output
0
1
2
3
4
5
6
7
8
9
10
Discussion