2013-10-18 4 views

答えて

32

-subscribeError:実際に購読しています:これは行末です。一方、-catch:は、単に信号を新しい信号に変換する(実際には加入しない)。プログラムのようなシグナルを考えてみてください。 -subscribeError:のときは、コンピュータに「このプログラムを実行したいが、エラーが出たら返信したいだけだ」と伝えています。 -catch:の場合は、「このプログラムではエラーが発生する可能性があります。古いものを元にして新しいエラーを処理したいのです。

信号を-catch:に戻さなければならない理由は、単純にエラーをスケーティングするだけではなく、実際にはエラーに応答するためです。元の信号が一旦エラーになったら、それは消えてしまいます。失敗した信号をそのまま残しておきたい場合は、-catch:で新しい信号を与えなければなりません。あなたが-catch:で何ができるかの

例:

  1. 戻るあなたは黙って失敗し、エラーをスローしないようにしたい場合は[RACSignal empty]
  2. 返品[RACSignal error:err]何かをした後でエラーを再現したい場合や、エラーを変換したい場合などです。
  3. 最初にエラーが発生した場合に備えて、購読したい他の信号を返します。
+0

良い説明'-catch:'の中からAlertViewを起動し、エラーを「スケルチ」するために空のシグナルを返すことは、少なくとも私の経験では、RACでのエラー処理の共通点のようです。 –

+2

@terrylewisただし、スレッドには注意してください。シグナルの値は任意のスレッドに渡すことができるので、 '-catch:'ブロックもそこで実行されます。 –