2013-10-18 56 views

回答

32

-subscribeError:實際訂閱:這是行結束。而-catch:只是將信號轉換爲新信號(並且實際上並未訂閱)。想像一個程序那樣的信號。當你-subscribeError:,你告訴計算機「我想運行這個程序,但我只想聽到你的消息,如果它出錯。」當你在-catch:的時候,你會說「我有這個程序可能會引發錯誤,我想根據舊的程序來創建一個不同的錯誤處理程序」。

您必須返回-catch:中的信號的原因在於,它不僅僅是用於壓制錯誤:它實際上是用於響應錯誤。一旦原始信號發生錯誤,它就會消失:如果您希望得到的信號在發生故障後繼續運行,則必須在-catch:中發出新信號。你可以在-catch:做什麼

例子:

  1. 回報,如果你想靜靜地失敗,並不會引發錯誤[RACSignal empty]
  2. 返回[RACSignal error:err]如果你想在做某事後重新拋出錯誤,或者你想改變錯誤。
  3. 返回一些您想要訂閱的其他信號,以防第一個出錯。
+0

很好的解釋。在'-catch:'內部啓動AlertView並返回一個空信號以「壓制」錯誤,這似乎是使用RAC進行錯誤處理的常用入口點,至少在我的經驗中如此。 –

+2

@terrylewis然而,要小心線程。由於信號的值可以在任意線程上傳遞,因此''catch:'塊也可以在那裏運行。 –