見出し画像

Swiftでいこう!- ちょっとTips。 3 - @ViewBuilder

@ViewBuilderを調べてみます。まず公式ドキュメント。

詳しく説明されているサイトです。

SwiftUIのVStackとHStackはクロージャーの中にViewコンポーネントを宣言的に実装できる。独自のビューコンテナを作ることができます。

その仕組みのキーとなるのが@ViewBuilderということです。

イニシャライザで@ViewBuilderのキーワードを付けて宣言することで使えるようになるようです。

init(@ViewBuilder content: @escaping () -> Content) {
       self.content = content
   }

スタンフォードの講義の中では

 init (items:[Item],aspectRatio:CGFloat,@ViewBuilder content:@escaping(Item)->ItemView){
       self.items = items
       self.aspectRatio = aspectRatio
       self.content = content
   }

と使われています。

@ViewBuilder content : ・・・

と宣言。

ViewBuilderでは、複数のViewを処理するために、その数分の引数を持つ buildBlock が公式ドキュメントでも定義されています。

static func buildBlock() -> EmptyView
static func buildBlock<Content>(Content) -> Content
static func buildBlock<C0, C1>(C0, C1) -> TupleView<(C0, C1)>
   ・
   ・
   ・

SwiftUIの仕組みとして目には見えませんが使われています。

  var body: some View {
     VStack {
       ViewBuilder.buildBlock(  Text("Hello"),Text("Hello"))
       
     }
  }
ViewBuilder.buildBlock()

が省略されて、

  var body: some View {
     VStack {
              Text("Hello")
               Text("Hello"))
     }
  }

となります。

独自ビューの作り方を解説されています。


この記事が気に入ったらサポートをしてみませんか?