之间有什么区别
属性上的@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()
}
}