我有一堂课,一个定期更新的“钟面”;它应该显示一系列随时间变化的指标。
因为我希望时钟也显示在小部件中,所以我发现我必须将类放入框架中(也许还有另一种方法,但我现在走得太远了)。这似乎导致了 SwiftUI 和可观察对象的问题。
在我的View
我有:
@ObservedObject var clockFace: myClock
在钟面上我有:
class myClock: ObservableObject, Identifiable {
var id: Int
@Publish public var metric:[metricObject] = []
....
// at some point the array is mutated and the display updates
}
我不知道是否Identifiable
需要,但这对结果没有任何影响。这public
是编译器要求的,但无论如何它总是这样。
使用这些行,我在应用程序启动时收到运行时错误:
objc[31175] 没有元类的类
所以我取下@Published
并更改为手动更新:
public var metric:[metricObject] = [] {
didSet {
self.objectWillChange.send()`
}
}
现在我得到一个显示,通过设置一个断点,我可以看到send()
它被定期调用。但是除非我从数组中添加/删除,否则显示不会更新。我在猜测计算变量(metricObject
SwiftUI 没有看到这些变化的大部分。我随后尝试向该类添加一个“虚拟”Int
并将其myClock
设置为随机值以尝试触发手动通过它刷新send()
它didSet
没有运气。
那么如何强制定期重绘显示呢?