【发布时间】:2020-01-07 20:19:47
【问题描述】:
我有一个班级,一个定期更新的“钟面”;它应该显示一系列随时间变化的指标。
因为我希望时钟也显示在小部件中,所以我发现我必须将类放入框架中(也许还有另一种方法,但我现在走得太远了)。这似乎导致 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 上触发手动刷新的随机值。
那么如何强制定期重绘显示?
【问题讨论】:
标签: swift swiftui observableobject observedobject