如何解决这是允许其他视图模式访问视图模型属性的正确方法吗?
我有一个SwiftUi视图链接到两个视图模型。一个管理秒表,另一个管理位置信息。在某个位置,我需要知道秒表的时间。
我采用的方法是在秒表上设置一个观察器,如图所示,其下还有代码片段。
class StopWatchManager: ObservableObject {
@Published var stopWatchTime = "00:00:00.0"
static let shared = StopWatchManager()
private init() {
}
...
}
class LocationManager: NSObject,ObservableObject {
@Observedobject var stopWatch = StopWatchManager.shared
....
let time = stopWatch.stopWatchTime
....
}
它确实有效,但是这是将这两个控制器连接在一起的正确方法,以便LocationManager可以获取秒表时间吗?如果没有,什么是最佳做法?
解决方法
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
}
}
}
,
您可以在SceneDelegate中实例化该类,并将其包含为rootViewController的环境对象。
然后在视图中可以拥有: @EnvironmentObject var stopWatchManager:StopWatchManager ... 让时间= stopWatchManager.stopWatchTime
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。