[英]SwiftUI MVVM published var is not updating between different views
I have the View 1 and View 2, View 1 has a button that navigate to View 2, in View 2 there is list of options to choose when clicked is expected to update a variable in View 1, but the variable in View 1 does not get updated.我有视图 1 和视图 2,视图 1 有一个导航到视图 2 的按钮,在视图 2 中有可供选择的选项列表,当单击时可以选择更新视图 1 中的变量,但视图 1 中的变量没有得到更新。
View1.swift查看1.swift
struct View1: View {
@ObservedObject var viewModel = MyViewModel()
var body: some View {
NavigationLink(destination: View2()) {
VStack {
Text(self.viewModel.addressChosen)
}
}
}
}
View2.swift查看2.swift
struct View2: View {
@ObservedObject var viewModel = MyViewModel()
var body: some View {
Button(action: {
self.viewModel.chooseAddress(addressSelected: "Chosen Address")
}) {
VStack {
Text(self.viewModel.addressChosen)
}
}
}
}
MyViewModel.swift MyViewModel.swift
class MyViewModel: ObservableObject, ModelService {
@Published var addressChosen = "Default"
func chooseAddress(addressSelected: String) {
print(addressSelected)
self.addressChosen = addressSelected
}
}
The var addressChosen is updated in View 2, but when I go back to View 1, the variable does not get updated. var addressChosen 在视图 2 中更新,但是当我 go 回到视图 1 时,变量没有得到更新。 What am I doing wrong?我究竟做错了什么? Thank you.谢谢你。
You are using two different MyViewModel .您正在使用两个不同的 MyViewModel 。 You need to pass the same MyViewModel() or only addressChosen from View1 to View2 .您需要将相同的MyViewModel()或仅addressChosen从View1传递到View2 。
MyViewModel()
to View2将相同的MyViewModel()
传递给 View2struct View1: View {
@ObservedObject var viewModel = CartViewModel()
var body: some View {
NavigationLink(destination: View2(viewModel: viewModel)) {
VStack {
Text(self.viewModel.addressChosen)
}
}
}
}
struct View2: View {
@ObservedObject var viewModel: CartViewModel
var body: some View {
Button(action: {
self.viewModel.chooseAddress(addressSelected: "Chosen Address")
}) {
VStack {
Text(self.viewModel.addressChosen)
}
}
}
}
class CartViewModel: ObservableObject {
@Published var addressChosen = "Default"
func chooseAddress(addressSelected: String) {
print(addressSelected)
self.addressChosen = addressSelected
}
}
addressChosen
to View2
addressChosen
传递给View2
struct View1: View {
@ObservedObject var viewModel = CartViewModel()
var body: some View {
NavigationLink(destination: View2(addressChosen: $viewModel.addressChosen)) {
VStack {
Text(self.viewModel.addressChosen)
}
}
}
}
struct View2: View {
@Binding var addressChosen: String
var body: some View {
Button(action: {
self.addressChosen = "Chosen Address"
}) {
VStack {
Text(self.addressChosen)
}
}
}
}
class CartViewModel: ObservableObject {
@Published var addressChosen = "Default"
func chooseAddress(addressSelected: String) {
print(addressSelected)
self.addressChosen = addressSelected
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.