【发布时间】:2020-12-28 02:50:51
【问题描述】:
如果我想在 SwiftUI 中呈现项目列表,我可以这样做(使用 XCode 12):
struct MyView: View {
let texts: [String]
var body: some View {
ScrollView {
LazyVStack {
ForEach(texts.indices, id: \.self) { index in
MyRow(label: texts[index])
}
}
}
}
struct MyRow: View {
let label: String
var body: some View {
Text(label).font(.title3).padding()
}
}
}
MyRow 可以是一个函数,而不是一个结构体,这使得代码更加简洁和实用:
struct MyView: View {
let texts: [String]
var body: some View {
ScrollView {
LazyVStack {
ForEach(texts.indices, id: \.self) { index in
MyRow(label: texts[index])
}
}
}
}
@ViewBuilder func MyRow(label: String) -> some View {
Text(label).font(.title3).padding()
}
}
我想了解这两种方法之间的区别。 是否存在您更喜欢其中一种的情况?
首先想到的是不能让@State 属性与函数一起使用,这意味着如果您的视图需要状态,则需要使用struct 方法。
就这些了吗?是否存在一种方法在优化方面更好的情况?调试?特征?便携性?
【问题讨论】:
-
分离视图有自己的刷新周期(取决于自己的状态),但从函数返回的视图将始终在调用者主体中重建/刷新。
-
结果是 ViewBuilder 方法似乎很棒,直到您需要具有可变状态的预览。
标签: swiftui