Добавление потока чисел с использованием ReactiveSwift
Я новичок в ReactiveSwift и FRP в целом, пытаюсь создать небольшое приложение-калькулятор, чтобы попытаться освоить его, и я застрял в поиске реактивного способа сделать что-то подобное. Если у меня есть функция, которая принимает значение, как я могу передать это значение в поток, который постоянно применяет функцию, которая принимает переданное значение и результат всех предыдущих значений? Например, как бы я сложил поток целых чисел? Пример кода будет очень полезным. Что-то вроде этого
func apply(_ value: Int) {
/// sends value to a stream that emits (value + previous values) to its observers
}
1 ответ
Вы, вероятно, хотите взглянуть на 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)
}
}