我试图在我的小应用程序中实现MVVM架构,我对如何从ViewModel更新我的NavigationStack
的path
感到困惑。我的path
是一个@Published
属性,并通过@EnvironmentObject
插入到我的View中。通过一个按钮,我正在使用ViewModel中的相应函数进行API调用。如果API调用成功,我想更改NavigationStack的path
。但我无法访问ViewModel中的@Published
属性!我可以使用完成处理程序,但这不是干净的MVVM,对吗?
型号:
enum pathCases: Hashable {
case Home, Settings
}
class Navigation: ObservableObject {
@Published var path: [pathCases] = []
}
字符串
查看:
//...
@EnvironmentObject var navigation: Navigation
//...
NavigationStack(path: $navigation.path) {
//...
Button("Make API-Call") {
myApiFunction()
}
//...
}
型
ViewModel:
@MainActor final class ViewModel: ObservableObject {
func myApiFunction() {
//change the array navigation.path - how?
}
}
型
1条答案
按热度按时间qoefvg9y1#
在视图模型中可以有一个
@Published
变量,视图可以监听它,并且可以使用.onChange
观察器将路径附加到导航环境对象中查看:
字符串
ViewModel
型
重要的是要理解新的API是“数据驱动的”,因此您的更改应该修改某些数据容器的状态(这里是您的ViewModel,View只是根据数据的状态对其做出React)。