你可能想看看的scan
運營商,它可以讓你指定一個初始值和累積新值的功能。我還沒有驗證這個代碼,但它會是這樣的:
let (signal, observer) = Signal<Int, NoError>.pipe()
signal
.scan(0) { acc, val in acc + val }
.observeValues { val in print(val) }
observer.send(value: 15) // Should print 15
observer.send(value: 6) // Should print 21
observer.send(value: 3) // Should print 24
你可以把它包在一個類這樣的(同樣,沒有測試過這一點,但它應該跨越的想法):
class Adder {
public let output: Signal<Int, NoError>
private let input: Observer<Int, NoError>
init() {
let (signal, observer) = Signal<Int, NoError>.pipe()
self.input = observer
self.output = signal
.scan(0) { acc, val in acc + val }
}
func apply(_ value: Int) {
input.send(value: value)
}
}