列出视图的子视图 SwiftUI

List a View's Children SwiftUI

有没有办法列出自定义 View 的子项?例如,如果我有一个像 Group 这样的结构,我能列出所有子 View 吗?这是一个例子:

ParentView {
    Child1()
    Child2()
    Child3()
}

有没有我可以在 ParentView 上调用的方法,它将 return 一个包含 Child1Child2Child3 的数组?

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 数据的视图,然后用新数据重新加载视图。