Π― ΠΈΡΠΊΠ°Π» ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ.
ΠΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ:
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Joe Ρ
ΠΎΡΠ΅Ρ Π²ΠΎΠΉΡΠΈ Π² ΡΠ»ΡΠΆΠ±Ρ Twitter Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅. ΠΠ° ΡΠΊΡΠ°Π½Π΅ Π΅ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° Ρ Π½Π°Π΄ΠΏΠΈΡΡΡ twitter, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ Π½Π° Π½Π΅Π΅, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π²Ρ
ΠΎΠ΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΡ, ΠΈ ΡΠ΅ΠΊΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° Β«ΠΡΠΌΠ΅Π½Π°Β». ΠΡΠΎΡΠ΅ΡΡ Π²Ρ
ΠΎΠ΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΡΡΡ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 30 ΡΠ΅ΠΊΡΠ½Π΄), ΠΈ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ½ΠΎΠ²Π° Π½Π°ΠΆΠΌΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ Π²Ρ
ΠΎΠ΄ Π² ΡΠΈΡΡΠ΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΌΠ΅Π½Π΅Π½.
Π― ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠΎΠ³ΠΎ, Π½ΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ΅Π½Ρ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΠΉ Π·Π°ΠΏΠ°Ρ . ΠΠΎΡ Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π» Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ:
<strong i="9">@property</strong> (strong, nonatomic) RACCommand *twitterLoginCommand;
<strong i="10">@property</strong> (strong, nonatomic) RACCommand *cancelCommand;
<strong i="11">@property</strong> (strong, nonatomic) id authenticatedUser;
<strong i="12">@property</strong> (weak, nonatomic) RACDisposable * authenticationDisposable;
-(void) viewDidLoad {
RAC(self, twitterButton.rac_command, self.twitterLoginCommand) = [[RACObserve(self, twitterLoginCommand.executing) flatten]
map:^id(NSNumber * value) {
@strongify(self);
if (value.boolValue) {
return self.cancelCommand;
} else {
return self.twitterLoginCommand;
}
}];
}
-(RACCommand *) cancelCommand {
if (!_cancelCommand) {
@weakify(self);
_cancelCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
@strongify(self);
[self.authenticationDisposable dispose];
return [RACSignal empty];
}];
}
return _cancelCommand;
}
- (RACCommand *)twitterLoginCommand {
if (!_twitterLoginCommand) {
@weakify(self);
_twitterLoginCommand = [[RACCommand alloc]initWithSignalBlock: ^RACSignal *(UIButton *button) {
@strongify(self);
RACSignal * signal = [self twitterSignInSignal];
self.authenticationDisposable = [signal subscribeNext:^(FAUser * user) {
self.authenticatedUser = user;
}error:^(NSError *error) {
self.authenticationDisposable = nil;
}];
return signal;
}];
}
return _twitterLoginCommand;
}
- (RACSignal *)twitterSignInSignal {
//Left out, returns a signal with a user
}
ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ twitter Π² viewDidLoad ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ takeUntil Π΄Π»Ρ ΡΠΈΠ³Π½Π°Π»Π° ΠΎΡΠΌΠ΅Π½Ρ (Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ), Π½ΠΎ ΡΡΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΌΠ΅Π½Ρ (Π·Π°Π΄Π°ΡΠ° Π²Ρ ΠΎΠ΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΈΠ³Π½Π°Π» Π½Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ takeUntil).
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΡΠΎ.
_twitterLoginCommand = [[RACCommand alloc] initWithSignalBlock:^(id _) {
@strongify(self);
return [[self
twitterSignInSignal]
takeUntil:self.cancelCommand.executionSignals];
}];
RAC(self.authenticatedUser) = [self.twitterLoginCommand.executionSignals switchToLatest];
ΠΡΠ΅Π΄Π»Π°Π³Π°Ρ Π²Π°ΠΌ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠ°ΠΊ ΡΠ°ΡΠΌ, ΠΈ Π²ΡΠ΅ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠ°Ρ Π½Π΅Ρ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΠΌΠ½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»Π°ΡΡ ΠΏΠ°ΡΠ° Π΄Π½Π΅ΠΉ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ ΡΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ, Ρ ΡΡΠΎ-ΡΠΎ ΡΠΏΡΡΡΠΈΠ», ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π² ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π·.
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°!
RAC (self.authenticatedUser) = [self.twitterLoginCommand.executionSignals switchToLatest];
Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π½Π°
RAC (self.authenticatedUser) = [self.twitterLoginCommand.executionSignals ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π΅ΡΡΡ];
Π»ΡΡΡΠ΅ ? @notxcain
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΡΠΎ.
ΠΡΠ΅Π΄Π»Π°Π³Π°Ρ Π²Π°ΠΌ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ