SwiftUI: @ViewBuilder

  • 用作子视图生成闭包参数的参数属性,允许这些闭包提供多个子视图。
func contextMenu<MenuItems: View>(
    @ViewBuilder menuItems: () -> MenuItems
) -> some View

该函数的客户端可以使用多语句闭包来提供多个子视图,如下例所示:

myView.contextMenu {
    Text("Cut")
    Text("Copy")
    Text("Paste")
    if isSymbol {
        Text("Jump to Definition")
    }
}
  • 如果一个function或是声明的一个子view里面返回的一个子视图,@ViewBuilder可以不写。

这个结论不确定,有搞清楚的可以留言评论。

struct ContentView1: View {
    var body: some View {
        VStack{
            label
            makeLabel()
        }
    }
    
    var label: some View{
        Label("Label", systemImage: "questionmark.circle")
    }
    
    func makeLabel() -> some View {
        Label("Label", systemImage: "questionmark.circle")
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容