λλ λ³ννλ μ νΈ μΈνΈλ₯Ό νλμ λ³ν©λ μ νΈλ‘ μ μνκΈ° μν΄ λ€μκ³Ό κ°μ μμ ν΄λμ€λ₯Ό κ½€ λ§μ΄ μ¬μ©νκ³ μμμ λ°κ²¬νκ³ μμ΅λλ€. κ°μ μΌμ μννλ λ μ°μν λ°©λ²μ΄ μμ΅λκΉ?
<strong i="6">@interface</strong> SignalSet : NSObject
<strong i="7">@property</strong> (nonatomic, readonly) RACSignal *mergedSignal;
- (void)addSignal:(RACSignal *)signal;
<strong i="8">@end</strong>
<strong i="9">@implementation</strong> SignalSet
- (instancetype)init {
self = [super init];
if (self) {
_signals = [NSSet new];
_mergedSignal = [[RACObserve(self, signals) map:^RACSignal *(NSSet *signals) {
return [RACSignal merge:signals];
}] switchToLatest];
}
return self;
}
- (void)addSignal:(RACSignal *)signal {
self.signals = [self.signals setByAddingObject:signal];
[signal finally:^{
// Remove the signal from the set to release it
self.signals = [[NSSet alloc] initWithArray:[[self.signals rac_sequence] ignore:signal].array];
}];
}
<strong i="10">@end</strong>
λ¬Όλ‘ RACSubject
μ¬μ©νμ¬ κ±°μ λμΌν μΈν°νμ΄μ€λ₯Ό μνν μ μμ΅λλ€.
RACSubject *signalSet = [RACSubject subject];
RACSignal *mergedSignals = [signalSet flatten:0];
// Add a signal
[signalSet sendNext:someSignal];
λ λμ λ°©λ²μ μꡬ μ¬νμ λ°λΌ RACSubject
λ₯Ό νΌν μ μλ€λ κ²μ
λλ€.
RACSignal *mergedSignals = [RACSignal never];
// Add a signal
mergedSignals = [mergedSignals merge:someSignal];
κ·Έλ°λ° -finally:
λ κΈ°μ‘΄ μ νΈμ λΆμμ©μ μΆκ°νμ§ μμ΅λλ€. μ€νλ € λΆμμ©μ΄ μλ μ μ νΈλ₯Ό λ°νν©λλ€. λ€μμ λ°νλ μ νΈκ° νκΈ°λκ³ κ΅¬λ
λμ§ μκΈ° λλ¬Έμ μ무 μμ
λ μννμ§ μμ΅λλ€.
[signal finally:^{
// Remove the signal from the set to release it
self.signals = [[NSSet alloc] initWithArray:[[self.signals rac_sequence] ignore:signal].array];
}];
κ°μ¬ ν΄μ! λλ λ λ²μ§Έ ννλ₯Ό μ’μνλ€.
μ΄κ²μ 2019λ μ μ λ₯Ό λμμ΅λλ€. κ°μ¬ν©λλ€ @brow