Architecture 这是允许其他视图模式访问视图模型属性的正确方法吗?

Architecture 这是允许其他视图模式访问视图模型属性的正确方法吗?,architecture,swiftui,Architecture,Swiftui,我有一个链接到两个视图模型的SwiftUi视图。一个管理秒表,另一个管理位置信息。在某个地点,我需要知道秒表上的时间 我所采取的方法是在秒表上设置一个观察者,如图及其下面的代码片段所示 它确实可以工作,但是这是将这两个控制器连接在一起的正确方法吗,以便LocationManager可以获得秒表时间?如果没有,最佳做法是什么?您可以在SceneDelegate中实例化该类,并将其作为rootViewController的环境对象包含 然后在视图中,您可以看到: @环境对象变量stopWatchM

我有一个链接到两个视图模型的SwiftUi视图。一个管理秒表,另一个管理位置信息。在某个地点,我需要知道秒表上的时间

我所采取的方法是在秒表上设置一个观察者,如图及其下面的代码片段所示


它确实可以工作,但是这是将这两个控制器连接在一起的正确方法吗,以便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
            }
    }
}