如何从合并中的主题分离订阅者?

时间:2019-09-16 10:17:28

标签: swift combine

我正在编写一个程序,该程序需要动态地从事件源附加/分离事件处理程序。 这种情况发生了很多次,我不希望由于附加/分离而造成任何消息丢失或重复。

但是似乎我在这里做错了事以分离合并订户。

import Foundation
import Combine

let a = PassthroughSubject<String,Never>()
var b = a
    .buffer(size: .max, prefetch: .byRequest, whenFull: .customError({ fatalError() }))
    .receive(on: DispatchQueue.main)
    .sink(receiveValue: { print($0) })
a.send("AAA")
b.cancel()
a.send("BBB")
b = a
    .buffer(size: .max, prefetch: .byRequest, whenFull: .customError({ fatalError() }))
    .receive(on: DispatchQueue.main)
    .sink(receiveValue: { print($0) })
a.send("CCC")
RunLoop.main.run()

这会打印出来。

AAA
BBB
CCC
CCC

CCC被复制,BBB是意外的。似乎取消b并不会使其脱离源a。看来我做这些事情完全是错的。

从主题附加/分离订阅者的正确方法是什么?在这种情况下,我想动态地将ba附加/分离。

  • Xcode 11 GM。

0 个答案:

没有答案