如何rxswift可观测值



我目前正在使用RIB和ReactorKit绑定网络数据。这里的问题是,网络结果显示为Observables,我很难将其绑定到ReactorKit。请告诉我是否有一种方法可以剥离Observable或将其转化为值。就像当BehaviorRelay是.value时,值就出来了。。。

dependency.loadData.getData().flatMap { $0.detailData.flatMap { $0.result }}

====>gt;可观察

现在我该怎么办?TT

请告诉我是否有办法剥离Observable或将其转换为值。

这被称为";留下";或";断开";monad和是一种代码气味。

在生产代码中,很少建议"打破monad",尤其是从可观察序列转移到块方法。应该谨慎地在异步和同步范例之间切换,因为这是并发问题(如死锁和可伸缩性问题(的常见根本原因。

Rx 简介

如果你绝对必须这样做,那么这里有一种方法:

class MyClass { 
private (set) var value: Int = 0
private let disposeBag = DisposeBag()
init(observable: Observable<Int>) {
observable
.subscribe(onNext: { [weak self] new in
self?.value = new
}
.disposed(by: disposeBag)
}
}

如上所述,当您查询value时,它将具有从可观察对象发出的最后一个值。你冒着比赛条件的风险这样做,这取决于你自己。

这是你问题的直接答案,但并不是全部。在ReactorKit中,API调用应该在reactor的mutate()函数中进行。该函数返回一个Observable<Mutation>,因此您不应该破坏monad,而应该将API响应映射到一个突变中,该突变可能是一个特定的枚举情况,然后传递到reduce()函数中。

最新更新