SwiftUI 5 现在使用@Observable包装器来观察类中的更改,而不是使其符合ObservableObject. 这摆脱了@Published我在工作流程中积极使用的包装器:
旧的实现
class OldObservable: ObservableObject {
let model = SomeModel()
@Published var someValue: String?
init() {
setupSubscribers()
}
func setupSubscribers() {
// someValuePublisher could be PassthroughSubject<String?, Never>()
model.someValuePublisher.assign(to:$someValue)
}
}
Run Code Online (Sandbox Code Playgroud)
新实施
@Observable
class NewObservable {
let model = SomeModel()
var someValue: String?
init() {
setupSubscribers()
}
func setupSubscribers() {
// Not working anymore
model.someValuePublisher.assign(to:$someValue)
}
}
Run Code Online (Sandbox Code Playgroud)
由于 someValue 不是已发布的属性,因此我无法assign(to:)再使用通常的属性。
到目前为止,为了使其工作,我必须使用旧的实现 allocate(to:on) ,我听说这可能会导致保留周期问题,并且相同结果的代码更长。
var subscribers = Set<AnyCancellable>()
func setupSubscribers() { …Run Code Online (Sandbox Code Playgroud)