非常に基本的なことですが、あまりはっきりと触れられていない(触れる必要がない?)のが、単純に固定値をラップしたシグナルを生成するケースです。方法自体は単純で、以下のようなメソッドが用意されています。
// 値の場合
RACSignal *singleValueSignal = [RACSignal return:@"foobar"];
// 下記と同義
[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {
[subscriber sendNext:@"foobar"];
[subscriber sendCompleted];
return nil;
}];
// `completed`だけの場合
RACSignal *emptySignal = [RACSignal empty];
// 下記と同義
[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {
[subscriber sendCompleted];
return nil;
}];
// `error`だけの場合
NSError *someError = ...;
RACSignal *errorSignal = [RACSignal error:someError];
// 下記と同義
[RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {
[subscriber sendError:someError];
return nil;
}];
利用ケースについて、例えば引数のシグナルの変化に合わせて指定したセレクターを実行する -[NSObject rac_liftSelector:withSignals:]
では、引数は全てシグナルでなければならないのですが、
[self.mapView rac_liftSelector:@selector(setCamera:animated:) withSignals:cameraSignal, [RACSignal return:@YES], nil];
というように、固定値を使いたい場合などにはよく使う必要が出てくるのではないでしょうか。