如果我想在 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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以是一个函数,而不是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()
}
}
Run Code Online (Sandbox Code Playgroud)
我想了解这两种方法之间的区别。是否存在您更喜欢其中一种的情况?
首先想到的是,您不能拥有@State
带有函数的属性,这意味着如果您的视图需要状态,则需要使用该struct
方法。
这就是全部?是否存在某种方法在优化方面更好的情况?调试?特征?可移植性?