合并 Timer.TimerPublisher 未开始

Combine Timer.TimerPublisher not starting

我正在创建一个登录令牌有效性计时器,我认为它需要是一个每秒(或每分钟或其他时间)滴答作响的单例,检查登录令牌是否仍然有效。

但我什至无法让单例每秒打印一条消息。为什么不呢?

import SwiftUI
import Combine

class TokenObserver: ObservableObject {
    private let publisher = Timer.TimerPublisher(interval: 1.0, runLoop: .main, mode: .default)
    private let cancellable: AnyCancellable?
    static let instance = TokenObserver()
    let uuid = UUID()

    private init() {
        NSLog("TokenObserver.init()")
        self.cancellable = self.publisher.sink(receiveCompletion: { completion in
            NSLog("TokenObserver \(completion)")
        }, receiveValue: { date in
            NSLog("TokenObserver timestamp=" + ISO8601DateFormatter().string(from: date))
        })
    }

    deinit {
        NSLog("TokenObserver.deinit()")
        self.cancellable?.cancel()
    }
}

struct ContentView: View {
    var body: some View {
        Text("Hello, world! Instance = " + TokenObserver.instance.uuid.uuidString)
            .padding()
    }
}

您必须在 Timer 发布商上调用 autoconnect() 才能触发它。

private init() {
    NSLog("TokenObserver.init()")
    self.cancellable = self.publisher.autoconnect().sink(receiveCompletion: { completion in
       NSLog("TokenObserver \(completion)")
   }, receiveValue: { date in
        NSLog("TokenObserver timestamp=" + ISO8601DateFormatter().string(from: date))
    })
}