Swiftgram/SSignalKit/SSignal+Catch.m
2015-01-31 02:39:38 +03:00

39 lines
1021 B
Objective-C

#import "SSignal+Catch.h"
#import "SMetaDisposable.h"
@implementation SSignal (Catch)
- (SSignal *)catch:(SSignal *(^)(id error))f
{
return [[SSignal alloc] initWithGenerator:^(SSubscriber *subscriber)
{
SMetaDisposable *disposable = [[SMetaDisposable alloc] init];
[subscriber addDisposable:disposable];
[subscriber addDisposable:[self startWithNext:^(id next)
{
SSubscriber_putNext(subscriber, next);
} error:^(id error)
{
SSignal *signal = f(error);
[subscriber addDisposable:[signal startWithNext:^(id next)
{
SSubscriber_putNext(subscriber, next);
} error:^(id error)
{
SSubscriber_putError(subscriber, error);
} completed:^
{
SSubscriber_putCompletion(subscriber);
}]];
} completed:^
{
SSubscriber_putCompletion(subscriber);
}]];
}];
}
@end