列出视图的子视图 SwiftUI
List a View's Children SwiftUI
有没有办法列出自定义 View
的子项?例如,如果我有一个像 Group
这样的结构,我能列出所有子 View
吗?这是一个例子:
ParentView {
Child1()
Child2()
Child3()
}
有没有我可以在 ParentView
上调用的方法,它将 return 一个包含 Child1
、Child2
和 Child3
的数组?
SwiftUI 带来了 UI 工作方式的整个范式转变。
当您创建视图时...
ParentView {
Child1()
Child2()
}
您实际上并不是在创建视图。同样,不应该有理由检查视图的状态。
With SwiftUI the view structure is a function of the data.
也就是说,当您的数据发生变化时,您的视图层次结构将更新以反映这些变化。
这也意味着数据流向是单向的。从您的数据...到视图。您没有从视图中获取数据。
因此,您不应该像这样检查视图。您应该检查创建视图的数据,以通过这种方式了解数据。
更新
同样,如果您想用父视图中的数据填充子视图,那么您应该使用 @State
对象来保存此数据,然后更新将重新加载视图的数据。
像这样...
struct MyUpdatingView: View {
@State private var items: [Int] = []
var body: some View {
VStack {
Button(action: { updateItems() }) {
Text("New item")
}
List(items) { item in
Text("Item: \(item)")
}
}
}
func updateItems() {
items.append(items.count)
}
}
这将创建一个更新其 @State
数据的视图,然后用新数据重新加载视图。
有没有办法列出自定义 View
的子项?例如,如果我有一个像 Group
这样的结构,我能列出所有子 View
吗?这是一个例子:
ParentView {
Child1()
Child2()
Child3()
}
有没有我可以在 ParentView
上调用的方法,它将 return 一个包含 Child1
、Child2
和 Child3
的数组?
SwiftUI 带来了 UI 工作方式的整个范式转变。
当您创建视图时...
ParentView {
Child1()
Child2()
}
您实际上并不是在创建视图。同样,不应该有理由检查视图的状态。
With SwiftUI the view structure is a function of the data.
也就是说,当您的数据发生变化时,您的视图层次结构将更新以反映这些变化。
这也意味着数据流向是单向的。从您的数据...到视图。您没有从视图中获取数据。
因此,您不应该像这样检查视图。您应该检查创建视图的数据,以通过这种方式了解数据。
更新
同样,如果您想用父视图中的数据填充子视图,那么您应该使用 @State
对象来保存此数据,然后更新将重新加载视图的数据。
像这样...
struct MyUpdatingView: View {
@State private var items: [Int] = []
var body: some View {
VStack {
Button(action: { updateItems() }) {
Text("New item")
}
List(items) { item in
Text("Item: \(item)")
}
}
}
func updateItems() {
items.append(items.count)
}
}
这将创建一个更新其 @State
数据的视图,然后用新数据重新加载视图。