其他一些ReactiveKit扩展

在上一篇文章(ReactiveKit的扩展集合)之后,还有更多…

  1. 对信号的承诺
 导入ReactiveKit 
导入PromiseKit
 扩展承诺 
{
公共函数toSignal()-> Signal
{
返回Signal {
self.then {elem-> Void in
Observer.completed(with:elem)
} .catch {错误
rator.failed(错误为NSError)
}
 返回NonDisposable.instance 
}
}
}

在我正在从事的项目中,有一段时间,我们同时使用PromiseKit和ReactiveKit,此扩展对于将PromiseKit Promise转换为ReactiveKit信号非常有用,从而提供了帮助迁移的桥梁。

2.顺序信号

  func serialSignals (_信号:[Signal ], 
已完成:[ReactiveKit.Result ] = [])
-> SafeSignal <[ReactiveKit.Result ]>
{
守卫信号=信号。第一
否则{返回Signal.just(已完成)}
 让newSignals = signal.count> 0吗?  Array(signals [1 ...]):[] 
 返回信号 
.map {ReactiveKit.Result.success($ 0)}
.flatMapError {Signal.just(ReactiveKit.Result.failure($ 0))
.flatMapLatest {
sequenceSignals(newSignals,已完成:completed [[$ 0]))
}
}

当我移至ReactiveKit时,我错过了使用PromiseKit的一件事是能够定义一个诺言数组并按顺序执行它们,等待每个诺言完成后再转到下一个。 该功能正是这样做的; 它接收一个Signals数组和一个起始数组(通常最初不传递),并在所有信号完成后触发一个信号; 最终信号包含结果类型数组。

3.可绑定

 协议可绑定:可释放,BindingExecutionContextProvider 
{
var bag:DisposeBag {get}
}
 扩展可绑定 
{
var解除分配:SafeSignal {
返回self.bag.deallocated
}
  var bindingExecutionContext:ExecutionContext { 
返回.immediateOnMain
}
}

使用ReactiveKit,为了能够绑定到例如一个类,它需要同时符合DeallocatableBindingExecutionContextProvider协议。 此Bindable协议和扩展提供了这样的功能,以便您只需要遵循它,提供所需的 ,然后您的类即可绑定。