Reactivecocoa: 동적 μ‹ ν˜Έ 집합을 λ³‘ν•©ν•˜λŠ” κ°€μž₯ μš°μ•„ν•œ 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

에 λ§Œλ“  2015λ…„ 06μ›” 24일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: ReactiveCocoa/ReactiveCocoa

λ‚˜λŠ” λ³€ν™”ν•˜λŠ” μ‹ ν˜Έ μ„ΈνŠΈλ₯Ό ν•˜λ‚˜μ˜ λ³‘ν•©λœ μ‹ ν˜Έλ‘œ μ œμ‹œν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 μž‘μ€ 클래슀λ₯Ό κ½€ 많이 μ‚¬μš©ν•˜κ³  μžˆμŒμ„ λ°œκ²¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 같은 일을 μˆ˜ν–‰ν•˜λŠ” 더 μš°μ•„ν•œ 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

<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>
question

λͺ¨λ“  3 λŒ“κΈ€

λ¬Όλ‘  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

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰