/
ForEach.swift
32 lines (29 loc) · 1.09 KB
/
ForEach.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//===----------------------------------------------------------*- swift -*-===//
//
// This source file is part of the Swift Argument Parser open source project
//
// Copyright (c) 2021 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//
struct ForEach<C>: MDocComponent where C: Collection {
var items: C
var builder: (C.Element, C.Index) -> MDocComponent
init(_ items: C, @MDocBuilder builder: @escaping (C.Element, C.Index) -> MDocComponent) {
self.items = items
self.builder = builder
}
var body: MDocComponent {
guard !items.isEmpty else { return Empty() }
var currentIndex = items.startIndex
var components = [MDocComponent]()
while currentIndex < items.endIndex {
let item = items[currentIndex]
components.append(builder(item, currentIndex))
currentIndex = items.index(after: currentIndex)
}
return Container(children: components)
}
}