SwiftUI/ForEach.init(subviews:content:)
WWDC
ForEach.init(subviews:content:)
サンプルコード
使ってみる
code:swift
import SwiftUI
struct ContentView: View {
"a",
"bb",
"ccc",
"dddd",
"eeeee"
]
1,
22,
333,
4444,
55555
]
var body: some View {
List {
Group(subviews: content) { subviews in
ForEach(subviews: subviews) { subview in
subview
// subviews.count を使ったりできる
}
}
}
}
@ViewBuilder
var content: some View {
ForEach(titles, id: \.self) { title in
Text(title)
}
ForEach(numbers, id: \.self) { number in
Text("\(number)")
}
}
}
https://scrapbox.io/files/66f0f76ae8ae07001c1ce369.png
メモ
あまり使うケースが想定できない
最終的に ForEach(subviews:) を使うことで最終的なResolved subViewsが分かるのは良い
ForEachを入れ子にしてもsubviewsとしては孫の数がカウントされる
以下を Groups(subviews:) で使用すると個数は8になる
code:swift
@ViewBuilder
var content: some View {
ForEach(titles, id: \.self) { title in
Text(title) // 2 times
}
ForEach(numbers, id: \.self) { number in // 3 times
ForEach(titles, id: \.self) { title in
Text(title) // 2 times
}
}
}
今までのForEachはデータを渡していたが、今回のはviewを渡せるようになっている