2013-10-18 11 views

risposta

32

-subscribeError: sottoscrive effettivamente: questa è la fine della linea. Mentre -catch: trasforma semplicemente un segnale in un nuovo segnale (e in realtà non si abbona). Pensa al segnale come a un programma. Quando fai il -subscribeError:, stai dicendo al computer "Voglio eseguire questo programma, ma voglio solo sentirti da te se si verifica un errore". Quando si è -catch:, si sta dicendo "Ho questo programma che potrebbe generare un errore e voglio crearne uno nuovo basato su quello vecchio che gestisce quell'errore in modo diverso".

Il motivo per cui è necessario restituire un segnale in -catch: è che non è semplicemente per gli errori di squelching: in realtà è per rispondere agli errori. Una volta che il segnale originale è stato errato, è andato tutto bene: se vuoi che il segnale risultante continui dopo un errore, devi dare un nuovo segnale in -catch:.

Esempi di ciò che si potrebbe fare in -catch::

  1. ritorno [RACSignal empty] se si vuole riuscire in silenzio e non genera un errore.
  2. Restituisce [RACSignal error:err] se si desidera rilanciare l'errore dopo aver fatto qualcosa, o forse si desidera trasformare l'errore.
  3. Restituisce qualche altro segnale a cui si desidera effettuare l'iscrizione nel caso in cui il primo errori venga eliminato.
+0

Buona spiegazione. lanciando un AlertView da '-catch:' e restituendo un segnale vuoto per "squelch" l'errore sembra un punto di ingresso comune per la gestione degli errori con RAC, almeno nella mia esperienza. –

+2

@terrylewis Fai attenzione a infilare lì, comunque. Poiché i valori di un segnale possono essere consegnati su un thread arbitrario, anche il blocco '-catch:' può essere eseguito qui. –