Skip to content
This repository was archived by the owner on Dec 27, 2020. It is now read-only.

Commit 141a907

Browse files
authored
view builder inits (#29)
1 parent 77bf3df commit 141a907

File tree

4 files changed

+56
-7
lines changed

4 files changed

+56
-7
lines changed

Examples/GridExamples/SingleColumnLayoutView.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,17 @@ import Grid
33

44
struct SingleColumnLayoutView: View {
55
var body: some View {
6-
Grid(0...100) { number in
7-
Card(title: "\(number)")
6+
Grid {
7+
Card(title: "1")
8+
Card(title: "2")
9+
Card(title: "3")
10+
Card(title: "4")
11+
Card(title: "5")
12+
Card(title: "6")
13+
Card(title: "7")
14+
Card(title: "8")
15+
Card(title: "9")
16+
Card(title: "10")
817
}
918
.padding()
1019
.gridStyle(

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ Grid {
4242
### FixedColumnsGridStyle
4343

4444
```swift
45-
Grid(0...100) { number in
46-
Card(title: "\(number)")
45+
Grid {
46+
Card(title: "1")
47+
Card(title: "2")
48+
Card(title: "3")
4749
}
4850
.gridStyle(
4951
FixedColumnsGridStyle(columns: 3, itemHeight: 160)

Sources/Grid/Grid+Inits.swift

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,50 @@
11
import SwiftUI
22

33
extension Grid {
4-
public init<Data: RandomAccessCollection>(_ data: Data, @ViewBuilder content: @escaping (Data.Element) -> Content) {
4+
public init<Data: RandomAccessCollection, Content: View>(_ data: Data, @ViewBuilder content: @escaping (Data.Element) -> Content) {
55
self.items = data.map({ AnyView(content($0)) })
66
}
77

8-
public init<Data: RandomAccessCollection, ID, Item: View>(@ViewBuilder content: () -> Content) where Content == ForEach<Data, ID, Item> {
8+
public init<Data: RandomAccessCollection, ID, Item: View>(@ViewBuilder content: () -> ForEach<Data, ID, Item>) {
99
let views = content()
1010
self.items = views.data.map { AnyView(views.content($0)) }
1111
}
1212
}
13+
14+
extension Grid {
15+
public init<C0: View>(@ViewBuilder content: () -> C0) {
16+
self.items = [AnyView(content())]
17+
}
18+
19+
public init<C0: View, C1: View>(@ViewBuilder content: () -> TupleView<(C0, C1)>) {
20+
self.items = [AnyView(content().value.0), AnyView(content().value.1)]
21+
}
22+
23+
public init<C0: View, C1: View, C2: View>(@ViewBuilder content: () -> TupleView<(C0, C1, C2)>) {
24+
self.items = [AnyView(content().value.0), AnyView(content().value.1), AnyView(content().value.2)]
25+
}
26+
27+
public init<C0: View, C1: View, C2: View, C3: View>(@ViewBuilder content: () -> TupleView<(C0, C1, C2, C3)>) {
28+
self.items = [AnyView(content().value.0), AnyView(content().value.1), AnyView(content().value.2), AnyView(content().value.3)]
29+
}
30+
31+
public init<C0: View, C1: View, C2: View, C3: View, C4: View>(@ViewBuilder content: () -> TupleView<(C0, C1, C2, C3, C4)>) {
32+
self.items = [AnyView(content().value.0), AnyView(content().value.1), AnyView(content().value.2), AnyView(content().value.3), AnyView(content().value.4)]
33+
}
34+
35+
public init<C0: View, C1: View, C2: View, C3: View, C4: View, C5: View>(@ViewBuilder content: () -> TupleView<(C0, C1, C2, C3, C4, C5)>) {
36+
self.items = [AnyView(content().value.0), AnyView(content().value.1), AnyView(content().value.2), AnyView(content().value.3), AnyView(content().value.4), AnyView(content().value.5)]
37+
}
38+
39+
public init<C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View>(@ViewBuilder content: () -> TupleView<(C0, C1, C2, C3, C4, C5, C6)>) {
40+
self.items = [AnyView(content().value.0), AnyView(content().value.1), AnyView(content().value.2), AnyView(content().value.3), AnyView(content().value.4), AnyView(content().value.5), AnyView(content().value.6)]
41+
}
42+
43+
public init<C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View, C7: View, C8: View>(@ViewBuilder content: () -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7, C8)>) {
44+
self.items = [AnyView(content().value.0), AnyView(content().value.1), AnyView(content().value.2), AnyView(content().value.3), AnyView(content().value.4), AnyView(content().value.5), AnyView(content().value.6), AnyView(content().value.7), AnyView(content().value.8)]
45+
}
46+
47+
public init<C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View, C7: View, C8: View, C9: View>(@ViewBuilder content: () -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)>) {
48+
self.items = [AnyView(content().value.0), AnyView(content().value.1), AnyView(content().value.2), AnyView(content().value.3), AnyView(content().value.4), AnyView(content().value.5), AnyView(content().value.6), AnyView(content().value.7), AnyView(content().value.8), AnyView(content().value.9)]
49+
}
50+
}

Sources/Grid/Grid.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import SwiftUI
22

33
/// A view that arranges its children in a grid.
4-
public struct Grid<Content> : View where Content : View {
4+
public struct Grid: View {
55
@Environment(\.gridStyle) var style
66

77
let items: [AnyView]

0 commit comments

Comments
 (0)