因此,在ContentView中,我创建了一个包含以下内容的视图:
ViewName()
我想将ContentView中的变量更改为ViewName中变量的值。我希望我可以做类似的事情:
ViewName() {
contentViewVariable = self.variableNameInViewNameInstance
}
但是那只是关于如何获取价值的一种猜测;它没有用。任何建议将不胜感激!
无论出于何种技术原因,都可以通过回调闭包来完成。
注意: 此类回调中的操作不应导致刷新发件人视图,否则将只是循环或丢失值
这里是用法和解决方案的演示。经过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 = ""
}
您可以使用@State
和@Binding
来实现。您应该在2019年观看这些WWDC视频,以了解更多有关此的信息。