一般来说,在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)
}
}
关于swift - 使用ReactiveSwift添加数字流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43161499/