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

當我打電話,是因爲用戶禁用藍牙:ReactiveCocoa 4:如何發送錯誤觀察者無需中斷信號

sendError(self.sink, error) 

Signal被中斷,我沒有收到更多next在再次啓用藍牙後,也不會發生interrupted事件。 Signal已損壞。

如何在不中斷/打破Signal的情況下將error類型發送到observer?我在RAC 4文檔中找不到。謝謝!

回答

1

根據設計,錯誤會導致信號結束。 documentation說:

失敗應該只用於表示「異常」終止。如果 讓操作員(或消費者)完成他們的工作很重要,那麼描述結果的Next事件可能更合適。

如果你想打開錯誤引入Next事件,您可以使用flatMapError操作所描述的here或使用retry,如果你希望只允許幾個錯誤的occurances。

0

如果你想要不同於Next* (Error|Completed)的語義,我建議在類型中進行編碼。您可以使用Signal不能失敗,但值可以是成功還是失敗,通過使用Result

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

signal會發出任何錯誤,但它的Next事件將是Result.Success<[CLBeacon]>Result.Failure<BeaconManagerError> **,並且在收到Result.Failure時信號不會終止。