如何访问内容视图';稍后在SwiftUI中使用哪些元素?

如何访问内容视图';稍后在SwiftUI中使用哪些元素?,swift,swiftui,Swift,Swiftui,假设我有这样一个内容视图: struct ContentView: View { @State private var selection = 0 var body: some View { TabView(selection: $selection) { CustomClass() .tabItem { VStack {

假设我有这样一个内容视图:

struct ContentView: View {
    @State private var selection = 0

    var body: some View {
        TabView(selection: $selection) {
            CustomClass()
                .tabItem {
                    VStack {
                        Image("First")
                        Text("First")
                    }
                }
                .tag(0)
            Button(action: { EmployeeStorage.sharedInstance.reload() }) {
                Text("Reload")
            }
                .tabItem {
                    VStack {
                        Image("Second")
                        Text("Second")
                    }
                }
                .tag(1)
        }
    }
}

// MARK: - SomeDelegateThatUpdatesMeLater
extension ContentView: SomeDelegateThatUpdatesMeLater {
    func callback() {
        // Here I want to update my content view's subviews
        // The ContentClass instance needs to be updated
    }
}

假设我想要侦听回调方法,然后稍后更新内容视图的选项卡编号1(CustomClass)。如何访问内容视图的子视图?我需要类似UIKit的subviewWithTag(:)的东西。SwiftUI中是否有类似的功能?

您可能应该重新考虑您的方法。你到底想发生什么?您有一些获取(或更新)数据的外部数据模型类型,您希望视图对此做出反应吗?如果是这种情况,请创建一个
observateObject
,并将其传递给您的
CustomClass

struct CustomClass:View{
@观测对象var模型:模型
var body:一些观点{
//根据观察到的对象创建视图
}
}
也许您希望收到来自
CustomClass
的事件通知

struct CustomClass:View{
var onButtonPress:()->Void={}
var body:一些观点{
按钮(“按我”){self.onButtonPress()}
}
}
结构父视图:视图{
变量体:某些视图{
CustomClass(onButtonPress:{/*在此处对按键作出反应*/})
}
}
最后,如果您真的想在视图上添加某种
标记
,您可以利用SwiftUI中的
首选项
系统。这是一个更复杂的话题,所以我将在这里指出我发现的一个很好的资源:

老实说,
subview with tag
无论如何都是穷人的工具。没有充分的理由使用标签。使用SwiftUI,您必须开始以不同的方式思考。视图总是只读的。如果需要更改某些内容,请以
body
正确生成新UI的方式更改数据。