ReactiveCocoa 4:如何在不中断信号的情况下向观察者发送错误

时间:2015-11-13 10:08:09

标签: ios swift reactive-cocoa reactive-cocoa-3

let (signal, sink) = Signal<[CLBeacon], BeaconManagerError>.pipe()

当我拨打此电话是因为用户禁用了蓝牙:

sendError(self.sink, error)

Signal被中断,再次启用蓝牙后,我不会收到更多nextinterrupted个事件。 Signal已被破坏。

如何在不中断/打破error的情况下将observer类型发送到Signal?我在RAC 4文档中找不到。谢谢!

2 个答案:

答案 0 :(得分:1)

根据设计,错误会导致信号完成。 documentation说:

  

失败只应用于表示“异常”终止。如果   让经营者(或消费者)完成工作很重要,   描述结果的下一个事件可能更合适。

如果您想将错误转换为flatMapError个事件,可以使用here所述的retry运算符,或者如果您只想允许几个出现,请使用<ul> <li ng-repeat-start="item in vm.array track by $index">{{item.a}}</li> <li ng-repeat-end ng-if="$index>0 && $index+1 % 15 == 0"></li> </ul> 错误。

答案 1 :(得分:1)

如果你想要不同于Next* (Error|Completed)的语义,我建议在类型中编码。您可以使用Signal 来使用无法失败的Result 但哪些值可以成功或失败

Signal<Result<[CLBeacon], BeaconManagerError>, NoError>

signal不会发出任何错误,但其Next个事件将为Result.Success<[CLBeacon]>Result.Failure<BeaconManagerError>,**且收到{{{}时信号不会终止1}}。