`@已发布的变量名称:ClassType在SwiftUI的外部_ /手动触发无效?

问题描述 投票:0回答:1

我发现了很多与此相关的与SwiftUI相关的主题,但没有帮助(例如Why an ObservedObject array is not updated in my SwiftUI application?

这不适用于Swift中的Combine(特别是使用Swift UInot):

class SomeTask {
  @Published var progress = Progress(totalUnitCount: 5) // Progress is a Class
  [...]
}
var task = SomeTask()
let cancellable = task.$progress.sink { print($0.fractionCompleted) }
task.progress.completedUnitCount = 2

这与SwiftUI无关,因此没有ObservableObject继承来获取objectWillChange,但是即使我尝试使用ObservableObjecttask.objectWillChange.send()也不起作用,也尝试添加extension Progress: ObservableObject {}不会”没有帮助。由于发布者通过var的willSet发出值,并且由于Progress本身是类类型,所以什么也没有发生。

好像没有真正体面的方式来手动触发它?

我发现只有[[解决方案只是重新分配自身,这很尴尬:

let pr = progress progress = pr

((写progress = progress是编译时错误)。

[唯一可行的方法可能是使用

Key-value-observing / KVO

和/或编写新的@PublishedClassType属性包装器]
swift key-value-observing combine reference-type
1个回答
1
投票
您可以尝试使用CurrentValueSubject<Progress, Never>
© www.soinside.com 2019 - 2024. All rights reserved.