ずっとコピペで使ってはいたけど、結局これが何なのかがわからず、1年経過したけど、いい加減自分でも使えるようにならないといけないと思い、簡単に言うと何なの?で調べたのでメモ
viewをまとめて返せるような仕組み。再利用しやすいように
htmlではよくあるんだけど、例えばメニューバーがあって。アイテムが3つ並んでいる。
こういう場合、もしかしたらメニューそのまま、でも横だったり縦にしたかったりする。
そんな時、毎度記述するのはさすがに保守性が悪すぎる
struct MyView: View {
@ViewBuilder
var content: some View {
Text("Header")
Divider()
Text("Footer")
}
var body: some View {
VStack {
content
}
}
}
@ViewBuilder の直後にあるプロパティだったり、メソッドについては、
こういう風に複数viewを返すことを許諾できる。
Vstack をHStackにすると、縦並びが横並びにTextが配置されると、色々便利
メソッドで書いてみる
上記はプロパティでサンプルだったので、今度はメソッドにViewBuilderをあててみる
@ViewBuilder
func sampleView() -> some View {
Text("Hello")
Text("World")
}
struct MyContent: View {
var body: some View {
VStack {
sampleView()
}
}
}
あくまでViewBuilderの直後のみがViewBuilderとしての有効範囲。
もう1つメソッドを追加する場合は、そのメソッドにもViewBuilderをつけておく