逆引きReactiveCocoa: 副作用だけのシグナルをリフティング/バインディングに使用する
ログインやデータの永続化など、特に next
として送る値がないシグナルの結果を -[NSObject rac_liftSelector:withSignals:]
や RAC()
マクロでのバインディングに使用したい場合にどうするべきかというパターンです。
RACSignal *login = [[[self // ログイン成功時には `completed`, 失敗時には `error` を送る。 loginWithUserName:userName password:password] concat:[RACSignal return:@YES]] catchTo:[RACSignal return:@NO]]; RAC(self, loggedIn) = login; // or [self rac_liftSelector:@selector(loginDidSuccess:) withSignals:login, nil];
とすると、-loginWithUserName:password:
の実装側では、next
として @YES/@NO
や RACUnit.defaultUnit
を送る必要がなくなります。
補足
元ネタでは [RACSignal return:@YES];
を返す部分に -then:
を使用していましたが、そう遠くない内にリリースされるであろう ReactiveCocoa 3.0 では -then:
が非推奨 (deprecated) になりそうなので置き換えています。