2015-11-13 2 views
1
let (signal, sink) = Signal<[CLBeacon], BeaconManagerError>.pipe() 

Когда я называю это потому, что пользователь отключил Bluetooth:ReactiveCocoa 4: Как отправить сообщение об ошибке в качестве наблюдателя, не прерывая сигнал

sendError(self.sink, error) 

Signal прерывается, и я не получаю более next ни interrupted событий после включения Bluetooth снова. Нарушается Signal.

Как я могу отправить error типам на observer без прерывания/нарушения Signal? Я не могу найти в документации RAC 4. Благодаря!

ответ

1

По дизайну ошибка вызывает сигнал. documentation говорит:

отказов следует использовать только для обозначения «ненормального» завершения. Если важно, чтобы операторы (или потребители) завершили свою работу, Следующее событие, описывающее результат, может быть более уместным.

Если вы хотите превратить ошибки в Next событий, вы можете использовать flatMapError оператор, как описано here или использовать retry, если вы хотите разрешить только несколько мест где ошибки.

0

Если вы хотите использовать другую семантику, чем Next* (Error|Completed) Я рекомендую кодировку того типа. Вы можете использовать Signal, который не может потерпеть неудачу, , но значения которых могут быть либо успех или неудача, используя Result:

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

Это signal не будет издавать никаких ошибок, но его Next события будут Result.Success<[CLBeacon]> или Result.Failure<BeaconManagerError> , ** и при получении Result.Failure сигнал не прекращается.

Смежные вопросы