gpt4 book ai didi

swift - 使用 ReactiveSwift 添加数字流

转载 作者:行者123 更新时间:2023-11-28 12:26:53 27 4
gpt4 key购买 nike

一般来说,ReactiveSwift 和 FRP 的新功能,试图构建一个小型计算器应用程序以尝试掌握它的窍门,但我一直在寻找响应式(Reactive)方法来做这样的事情。如果我有一个接受值的函数,我如何将该值传递给不断应用接受传递值的函数的流,以及所有先前值的结果?例如,我如何将整数流相加?示例代码将非常有帮助。像这样的东西

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com