@ViewBuilder on property vs in init,存储闭包或结果值



之间有什么区别

属性上的@ViewBuilder

struct SomeView<Content:View>: View {
@ViewBuilder var content: () -> Content
}

init中,存储闭包

struct SomeView2<Content:View>: View {
var content: () -> Content

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

init中,存储结果值

struct SomeView3<Content:View>: View {
var content: Content

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

所有的解决方案似乎都有效。那么,为什么一个人会选择一个而不是另一个呢?

有人在今年的休息室里询问,一位苹果工程师建议存储结果值。

Q:但是,建议使用@ViewBuilder进行自定义的方法是什么components:在init((中立即调用它并存储视图,或者稍后在主体内部调用它并存储视图生成器它本身

A: 我们通常建议立即解决存储视图

https://onmyway133.com/posts/wwdc-swiftui-lounge/#use-查看内置

例如,此版本

struct SomeView3<Content:View>: View {
let content: Content

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

最新更新