ReactiveKit的扩展集合
- 傻瓜发信号
扩展布尔
{
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:{}),所以这里有一个扩展名可以做到这一点。