【问题标题】:Swift combine TimerPublisher without any subscribersSwift 结合 TimerPublisher 没有任何订阅者
【发布时间】:2020-10-21 06:42:32
【问题描述】:

我对 Apple 的 Combine 框架中的 TimerPublisher 有疑问。文档说:在给定时间间隔内重复发出当前日期的发布者。对于非组合 Timer 对象,您可以取消它们。在创建TimerPublisher 并连接到它之后如何清理?假设我取消了所有接收器并且没有订阅计时器发布者。发布者是否仍会在系统中产生一些开销?如果是这样,那么我该如何取消计时器发布者?

【问题讨论】:

  • 当订阅者取消时,它会取消整个管道,包括TimerPublisher。所以,let c = Timer(...).autoconnect().sink {...},然后c.cancel() 会起作用。或者,如果 c 简单地取消初始化
  • 如果您有多个接收器会怎样?比如let c = Timer(...).autoconnect(); let s = c.sink {...}; let t = c.sink {...},那么你必须取消所有个sinks才能取消定时器吗?
  • 我猜不是。我在终端中尝试过,New Dev 是对的,取消一个接收器会完全取消计时器发布者,即使连接了更多接收器。不知道为什么这被否决了¯_(ツ)_/¯

标签: swift combine


【解决方案1】:

找到答案here。但这并不明显。在这里。

// create the timer and make it auto-connected
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()

// cancel it upstream
self.timer.upstream.connect().cancel()

【讨论】:

    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2016-02-20
    • 2018-03-10
    • 2011-12-18
    相关资源
    最近更新 更多