gpt4 book ai didi

SwiftUI:结构 View 与@ViewBuilder

转载 作者:行者123 更新时间:2023-12-04 13:55:15 28 4
gpt4 key购买 nike

如果我想在 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如果您的 View 需要状态,请使用方法。
这就是全部?是否存在一种方法在优化方面更好的情况?调试?特征?可移植性?

最佳答案

@ViewBuilder主要用于在不使用解析器的情况下有条件地呈现 View ,例如 AnyView(YourView) .报价 Apple Developer's website :“此函数的客户端可以使用多语句闭包来提供多个 subview ”。例如,如果您想根据变量显示 View ,即如果某个变量为真则渲染 View1,如果它为假则渲染 View2。

关于SwiftUI:结构 View 与@ViewBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63815577/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com