我有一个简单的SwiftUI视图,它有一个StateObject,我为该视图创建了一个ViewModifier,并在视图修饰符中添加了一个onReceive事件,以侦听主视图(MyView)中的更改,如下所示:
class MyViewModel: ObservableObject {
@Published var myProperty: Bool = false
}
struct MyView: View {
@StateObject var myViewModel = MyViewModel()
var body: some View {
Text("Hello, world!")
.padding()
.modifier(MyViewModifier(myViewModel: myViewModel))
.onTapGesture {
myViewModel.myProperty = true
}
}
}
struct MyViewModifier: ViewModifier {
@ObservedObject var myViewModel: MyViewModel
func body(content: Content) -> some View {
content
.onReceive(myViewModel.$myProperty, perform: { newValue in
print("new value for myProperty is \(newValue)")
})
}
}但是,当我点击文本"Hello“时,onReceive修饰符不会在MyViewModifier中触发,我尝试的是:
MyView.
StateObject更改为ObservedObject在ObservedObject中将ObservedObject更改为MyViewModifier中的Binding,但无法找到将整个StateObject的绑定从MyView传递到MyViewModifier.的方法
上述任何一项都没有解决这个问题。
- note:我需要将整个视图模型对象向下传递给MyViewModifier,因为这是来自一个大型项目的一个小示例,它需要整个视图模型对象在视图修饰符中可用。
发布于 2021-02-03 09:21:17
使用onChange(of:perform:)
为此视图添加了一个修饰符,该修饰符在特定值更改时触发操作。https://developer.apple.com
onChange(of: myViewModel.myProperty) { value in
print("Value \(value)")
}https://stackoverflow.com/questions/66024018
复制相似问题