@Published 属性 在第一个之后不发出事件的单例

@Published property in singleton not emitting events after the first one

我在单例 class 中有一个 @Published 属性 ,它在视图模型 class 中被观察到,它只收到第一个初始值而不是之后.为什么?

查看

import SwiftUI

struct ContentView: View {

    @ObservedObject var viewModel = ContentViewModel(singletonService: SingletonService.shared)

    var body: some View {
        NavigationView {
            Form {
                Text("Hello World")
            }.navigationBarItems(trailing: Button("Increase Number", action: {
                SingletonService.shared.increaseNumber()
            }))
        }
    }
}

视图模型

import Combine

class ContentViewModel: ObservableObject {

    init(
        singletonService: SingletonService
    ) {
        let cencellable = singletonService.$number.sink(receiveValue: { print([=12=]) })
        // Never called after the first time
    }

}

单例

import Combine

class SingletonService {

    static let shared = SingletonService()

    @Published var number = 0

    func increaseNumber() {
        number += 1
    }

}

订阅会持续到订阅者还活着,但在您的情况下

let cencellable = singletonService.$number.sink(receiveValue: { print([=10=]) 

订阅者被断章取义销毁。应该是

private var cancellables = Set<AnyCancellable>()

init(singletonService: SingletonService) {
     singletonService.$number
        .sink(receiveValue: { print([=11=]) })
        .store(in: &cancellables)
}