ReactiveSwift 和 FRP 的新功能,试图构建一个小型计算器应用程序来尝试掌握它的窍门,我被困在弄清楚做这样的事情的反应式方法。如果我有一个接受值的函数,如何将该值传递给不断应用一个函数的流,该函数接受传递的值以及所有先前值的结果?例如,我将如何添加整数流?示例代码将非常有帮助。像这样的东西
func apply(_ value: Int) {
/// sends value to a stream that emits (value + previous values) to its observers
}
您可能想看一下 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)
}
}