小编zou*_*tre的帖子

使用新的 SwiftUI Observable 框架将组合发布者分配给变量

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)

swift swiftui combine

12
推荐指数
0
解决办法
457
查看次数

标签 统计

combine ×1

swift ×1

swiftui ×1