忽略 CwlSignal 发送的先前值

Ignore previous values sent by a CwlSignal

我有一个 continuous 父信号,我从中导出各种其他信号。大多数订阅者都接受“连续”语义,这意味着他们确实希望在订阅时收到最后一个值。但是对于一些订阅者,我只想接收未来的值,而不是初始值。示例:

import CwlSignal

let (input, signal) = Signal<Int>.create { s in s.continuous() }

input.send(value: 1)
input.send(value: 2)

let e1 = signal.subscribeValues { val in
    print("A: \(val)")
}

let e2 = signal.subscribeValues { val in
    print("B: \(val)")
}

input.send(value: 3)
input.close()

这会打印:

A: 2
B: 2
A: 3
B: 3

现在我希望第二个订阅不接收初始值,即。输出应如下所示:

A: 2
A: 3
B: 3

是否可以在不调整父信号的情况下获得这种行为?

我从未使用过 CwlSignal,但它 looks like it has a skip operator 与大多数响应式框架一样。这个有用吗?

let e2 = signal.skip(1).subscribeValues { val in
    print("B: \(val)")
}

这可以使用 multicast 信号来解决,引用 reply from the library author:

let (input, multicastSignal) = Signal<Int>.create { s in s.multicast() }
let continuousSignal = multicastSignal.continuous()

input.send(value: 1)
input.send(value: 2)

let e1 = continuousSignal.subscribeValues { val in
    print("A: \(val)")
}

let e2 = multicastSignal.subscribeValues { val in
    print("B: \(val)")
}

input.send(value: 3)