ReactiveKit的扩展集合

  1. 傻瓜发信号
 扩展布尔 
{
func trueSignal(或失败:NSError)-> Signal
{
保护自己else {返回Signal.failed(fail)}
 返回Signal.just(true) 
}
}

将布尔转换为故障 信号

2.可选信号

 扩展名可选 
{
func valueSignal(或失败:NSError)-> Signal
{
切换自我{
case .some(let value):返回Signal.just(值)
案例.none:返回Signal.failed(失败)
}
}

Optional转换为故障 信号

3.尝试/捕获信号

  func TrySignal (有趣:@escaping()throws-> T)-> Signal  
{
返回信号{
 做{ 
让res =尝试fun()
Observer.completed(with:res)
}将let错误捕获为NSError {
观察者失败(错误)
}

返回NonDisposable.instance
}
}

try / catch转换为信号

4.不

 扩展SignalProtocol其中Self.Element == Bool 
{
func not()-> ReactiveKit.Signal {
返回self.map {$ 0 == false}
}
}

不适用于Bool元素的下一个事件。

5.首先

 扩展SignalProtocol 
{
func first(包括:@转义(Self.Element)-> Bool)
-> ReactiveKit.Signal
{
返回self.filter(include).take(first:1)
}
}

仅发出通过的第一个元素包括测试。

6.下一个或失败

 扩展SignalProtocol 
{
func onNextOrFailed(_块:@转义(()->无效))
->信号
{
返回self.doOn(next:{_ in block()},
失败:{_ in block()})
}
}

有时(例如:清理),无论我们收到下一个事件还是失败的事件,我们都希望执行相同的操作。

7.接下来

 扩展SignalProtocol 
{
func onNext(_ block:@转义((元素)->无效))
->信号
{
返回self.doOn(下一个:块)
}
}

95%的时间中,我们仅使用doOn(next:{}),所以这里有一个扩展名可以做到这一点。