gpt4 book ai didi

system.reactive - 有没有办法在定义后以声明方式将更新推送到 observable?

转载 作者:行者123 更新时间:2023-12-04 16:07:40 28 4
gpt4 key购买 nike

我正在探索 Rx,我想看看我是否可以在此元素的组件初始化之前以声明方式定义一些 UI 元素的输入和输出。

这是它的样子:

class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!

var child: ButtonComponent!

override func viewDidLoad() {
super.viewDidLoad()

let buttonInput = PublishSubject<()>()
let buttonOutput = buttonInput
.scan(0) { count, _ in
count + 1
}
.map { $0.description }

self.child = ButtonComponent(
button: self.button,
input: buttonInput,
output: buttonOutput
)
}
}

class ButtonComponent {
weak var button: UIButton!
let disposeBag = DisposeBag()

init(button: UIButton, input: PublishSubject<()>, output: Observable<String>) {
self.button = button

output
.subscribeNext { string in
button.setTitle(string, forState: .Normal)
}
.addDisposableTo(disposeBag)

button.rx_tap
.subscribeNext {
input.onNext($0)
}
.addDisposableTo(disposeBag)
}
}

这里的问题是我使用 PublishSubject 将更新推送到输入流,这是必要的,建议不要这样做。 Rx 是否提供了一种以某种方式向已经运行的 observable 添加序列的方法?

最佳答案

经过一番研究,答案似乎是否定的。仅仅因为如果你想向一个已经运行的 observable 添加一个序列,它就是一个突变。并且没有声明性的方法来进行突变。

我查看了一个名为 cycle.js 的 javascript 库,它执行完全相同的操作,他们使用 ReplaySubject 以类似的方式解决了这个问题。

你唯一能做的就是让它看起来更好一点

button.rx_tap
.subscribe(input)

代替
button.rx_tap
.subscribeNext {
input.onNext($0)
}

关于system.reactive - 有没有办法在定义后以声明方式将更新推送到 observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34611578/

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