2 RACCommands так, что один отключен, в то время как другой выполняется и наоборот
Как я могу создать 2 RACCommand
s так, что один отключен, а другой выполняется, и наоборот?
Вот так,
_prevTrackCommand = [[RACCommand alloc] initWithEnabled: [_nextTrackCommand.executing not] signalBlock:^RACSignal *(id _) {}];
_nextTrackCommand = [[RACCommand alloc] initWithEnabled: [_prevTrackCommand.executing not] signalBlock:^RACSignal *(id _) {}];
но этот код не будет работать как _nextTrackCommand
является nil
по сути _prevTrackCommand
initilized.
1 ответ
Решение
Вы могли бы использовать RACSubject
который может функционировать как RACSignal
но позволяет вручную пересылать события:
RACSubject* commandAActive = [RACSubject subject];
RACSubject* commandBActive = [RACSubject subject];
RACCommand* commandA = [[RACCommand alloc] initWithEnabled:[commandBActive not]
signalBlock:^RACSignal * _Nonnull(id _Nullable input) {
// block
}];
RACCommand* commandB = [[RACCommand alloc] initWithEnabled:[commandAActive not]
signalBlock:^RACSignal * _Nonnull(id _Nullable input) {
// block
}];
[commandA.executing subscribeNext:^(NSNumber * _Nullable x) {
[commandAActive sendNext:x];
}];
[commandB.executing subscribeNext:^(NSNumber * _Nullable x) {
[commandBActive sendNext:x];
}];