【发布时间】:2019-12-20 10:33:50
【问题描述】:
我有一个带有附加 ViewModel 的 SwiftUI(Beta 5)视图。我想通过 navigationLink 导航到它并传入一个简单的参数(在本例中称为 FSAC)
我使用导航
NavigationLink("Next", destination: MyTestView(FSAC: "testFsac"))
视图有一个带有 willSet 和 didSet 属性观察者的 FSAC 属性
struct MyTestView: View {
@ObservedObject var vm = MyTestViewModel()
var FSAC: String {
willSet {
print("will set fsac")
}
didSet {
print("did set fsac")
vm.FSAC = FSAC
}
}
var body: some View {
VStack {
Text("FSAC: \(FSAC)")
Text("VM FSAC: \(vm.FSAC)")
}
}
}
永远不会调用打印语句。第一个文本框正确显示参数;第二个是空白的。
如何让 Property Observers 触发?
更一般地说,是否有一种“正确”的方式来使用 navigationLink 将参数传递给具有 ViewModel 的 View?
【问题讨论】:
-
对我来说可能是一个愚蠢的问题,但你为什么要在
View中设置这样的属性?你已经有了MyTestViewModel——不应该在那里做这样的事情,让MyTestView对模型的状态变化做出反应吗? -
@dfd 我正在传递参数,因为正如我所见,NavigationLink 要求我将其传递(参见我的第一个代码 sn-p: MyTestView(FSAC: "testFsac") )。我可以在 NavigationLink 中实例化并传入整个 ViewModel 类,但这感觉就像超出了调用视图的单一职责。
-
就像我说的,这可能是一个愚蠢的问题。我不使用
NavigationLink- 不需要。但是,考虑到这是一个 SwiftUI 视图,我认为您可以创建两个“测试”变量......将它们设为@State...... 看看有什么用。当我完成此操作时,@State是关键部分。如果是这样 - 如果我不知道NavigationLink,那么这不是意味着你可以使用你的ObservableObject吗? “更一般地说,是否有一种“正确”的方式来使用 navigationLink 将参数传递给具有 ViewModel 的视图?” 是否已经回答了这个问题,但您搜索的是错误的术语?我经常这样做——称之为斗牛! -
试试这个,它有效! stackoverflow.com/a/59391476/8457280
标签: swift mvvm viewmodel swiftui didset