Architecture 这是允许其他视图模式访问视图模型属性的正确方法吗?
我有一个链接到两个视图模型的SwiftUi视图。一个管理秒表,另一个管理位置信息。在某个地点,我需要知道秒表上的时间 我所采取的方法是在秒表上设置一个观察者,如图及其下面的代码片段所示Architecture 这是允许其他视图模式访问视图模型属性的正确方法吗?,architecture,swiftui,Architecture,Swiftui,我有一个链接到两个视图模型的SwiftUi视图。一个管理秒表,另一个管理位置信息。在某个地点,我需要知道秒表上的时间 我所采取的方法是在秒表上设置一个观察者,如图及其下面的代码片段所示 它确实可以工作,但是这是将这两个控制器连接在一起的正确方法吗,以便LocationManager可以获得秒表时间?如果没有,最佳做法是什么?您可以在SceneDelegate中实例化该类,并将其作为rootViewController的环境对象包含 然后在视图中,您可以看到: @环境对象变量stopWatchM
它确实可以工作,但是这是将这两个控制器连接在一起的正确方法吗,以便LocationManager可以获得秒表时间?如果没有,最佳做法是什么?您可以在SceneDelegate中实例化该类,并将其作为rootViewController的环境对象包含 然后在视图中,您可以看到: @环境对象变量stopWatchManager:stopWatchManager ...
让time=stopWatchManager.stopWatchTime
ObservedObject
包装器仅在SwiftUI中工作。要观察其他类的类内发布者,可以使用以下方法
class LocationManager: NSObject, ObservableObject {
private var time: String = "00:00:00.0"
private var cancellable: AnyCancellable?
override init() {
super.init()
cancellable = StopWatchManager.shared.$stopWatchTime
.sink { [weak self] time in
self?.time = time // << update local when remote changes
}
}
}
类位置管理器:NSObject,ObservableObject{
私有变量时间:String=“00:00:00.0”
私有var可取消:任何可取消?
重写init(){
super.init()
可取消=StopWatchManager.shared.$stopWatchTime
.sink{[弱自我]时间
自我?.时间=时间//
class LocationManager: NSObject, ObservableObject {
private var time: String = "00:00:00.0"
private var cancellable: AnyCancellable?
override init() {
super.init()
cancellable = StopWatchManager.shared.$stopWatchTime
.sink { [weak self] time in
self?.time = time // << update local when remote changes
}
}
}