如何在ContentView SwiftUI中访问视图实例的变量?

问题描述 投票:1回答:2

因此,在ContentView中,我创建了一个包含以下内容的视图:

ViewName()

我想将ContentView中的变量更改为ViewName中变量的值。我希望我可以做类似的事情:

ViewName() {
    contentViewVariable = self.variableNameInViewNameInstance
}

但是那只是关于如何获取价值的一种猜测;它没有用。任何建议将不胜感激!

xcode swiftui instance-variables
2个回答
1
投票

无论出于何种技术原因,都可以通过回调闭包来完成。

注意: 此类回调中的操作不应导致刷新发件人视图,否则将只是循环或丢失值

这里是用法和解决方案的演示。经过Xcode 11.4 / iOS 13.4的测试]

ViewName { sender in
    print("Use value: \(sender.vm.text)")
}

struct ViewName: View {

    @ObservedObject var vm = ViewNameViewModel()

    var callback: ((ViewName) -> Void)? = nil    // << declare

    var body: some View {
        HStack {
            TextField("Enter:", text: $vm.text)
        }.onReceive(vm.$text) { _ in
            if let callback = self.callback {
                callback(self)       // << demo of usage
            }
        }
    }
}

class ViewNameViewModel: ObservableObject {
    @Published var text: String = ""
}
    

2
投票

您可以使用@State@Binding来实现。您应该在2019年观看这些WWDC视频,以了解更多有关此的信息。

© www.soinside.com 2019 - 2024. All rights reserved.