рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЕрдкрдирд╛ рд╕рд┐рд░ рдирд╣реАрдВ рд▓реЗ рд╕рдХрддрд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ UIButton рд╣реИ рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИ - рдПрдХ рд╡рд┐рд▓реЛрдкрдиред рдореЗрд░реЗ рд╡реНрдпреВ рдореЙрдбрд▓ рдореЗрдВ deleteCommand
рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ рдЬреЛ рдПрдХ рдХрдорд╛рдВрдб рд▓реМрдЯрд╛рддреА рд╣реИ рдЬреЛ рдХрдорд╛рдВрдб рдХреЛ рдмрдЯрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рд╡рд╛рдпрд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрдм рдмрдЯрди рдЯреИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдкреБрд╖реНрдЯрд┐рдХрд░рдг UIAlertView
рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдареАрдХ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд▓реЛрдкрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рд╡реЗ рд░рджреНрдж рдХрд░реЗрдВ рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ "рдкреБрд╖реНрдЯрд┐рдХрд░рдг" рд╡реНрдпрд╡рд╣рд╛рд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдореВрд▓рднреВрдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ - рдореИрдВ рдкрд╣рд▓реЗ рдкреБрд╖реНрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЙрд╕ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП UIAlertView
) рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рджреГрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд▓рд░реНрдЯ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╕реНрддреБрддрд┐ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд╣реИред
рддреЛ рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛, рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдХ рдПрдХрд▓ RACCommand рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкреБрд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рд╡рд┐рд▓реЛрдкрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ UIButton
рдЬреБрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ?
рдЕрдкрдиреЗ рджреГрд╢реНрдп рдореЙрдбрд▓ рд╕реЗ alerts
рд╕рд┐рдЧреНрдирд▓ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ AlertViewModel
s рдХреЛ рдмреЗрдирдХрд╛рдм рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХрдорд╛рдВрдб рд╕реЗрдЯ рдХрд░реЗрдВред рдпрд╣ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдпрд╣ "рдкреБрд╖реНрдЯрд┐рдХрд░рдг" рд╡реНрдпрд╡рд╣рд╛рд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдореВрд▓рднреВрдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ - рдореИрдВ рдкрд╣рд▓реЗ рдкреБрд╖реНрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ред
рдЖрдк рдореЙрдбрд▓ рджреЗрдЦрдиреЗ рдореЗрдВ "рд╕реБрд░рдХреНрд╖рд╛ рдмрдВрдж рд╣реЛрдирд╛" рдореЙрдбрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреБрд╖реНрдЯрд┐ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЗрд╕реЗ рдмрд╣реБрдд рдХрд╕рдХрд░ рди рдмрд╛рдВрдзреЗрдВ: рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдбрд┐рд▓реАрдЯ рдмрдЯрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдИрдВ рдУрд░ рд╕реНрд╡рд╛рдЗрдк рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛрдЧрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВ: рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рдЯреИрдк рдХрд░рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдмрд╕ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЬрд╛рдКрдВрдЧрд╛: рдмрдЯрди рдХреЗ enabled
рдХреЛ рдХрдорд╛рдВрдб рд╕реЗ рдмрд╛рдВрдзреЗрдВ, рд▓реЗрдХрд┐рди рдХрдорд╛рдВрдб рдХреЛ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ, рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрдорд╛рдВрдб рдХреЗ -execute:
рдХреЛ UIAlertView
рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред
рд╣рд╛рдБ рдореВрд▓ рд░реВрдк рд╕реЗ рдбреЗрдирд┐рд╕ рдиреЗ рдХреНрдпрд╛ рдХрд╣рд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред
рдЖрдкрдХреЗ рд╡реНрдпреВ рдореЙрдбрд▓ рдкрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ:
рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ (рдЕрдирдкрд░реАрдХреНрд╖рд┐рдд, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдордЬрдмреВрдд/рдХрдордЬреЛрд░ рдХрд░рдиреЗ рдХреЗ рдмрд┐рдирд╛):
self.deleteCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id objectToDelete) {
[return self.confirmationCommand.executionSignals
switchToLatest]
flattenMap:^id(NSNumber *confirmed) {
if(confirmed) {
return [self deleteObject:objectToDelete];
} else {
return [RACSignal error:someErrorWithAMessageMaybe];
}
}];
}];
self.confirmationRequiredSignal = [self.deleteCommand.executing
filter: ^BOOL(NSNumber *executing) {
return executing.boolValue;
}];
рддреЛ рдЖрдкрдХреЗ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдЖрдкрдХрд╛ рдбрд┐рд▓реАрдЯ рдмрдЯрди рд╡реНрдпреВ рдореЙрдбрд▓ рдкрд░ deleteCommand
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рддреБрд░рдВрдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдбрд┐рд▓реАрдЯ рдХрдорд╛рдВрдб рдЕрдм рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП confirmationCommand.executionSignals
рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдбрд┐рд▓реАрдЯ рдХрдорд╛рдВрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди self.confirmationRequiredSignal
рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рдлрд┐рд░ рдЖрдкрдХрд╛ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпреВрдореЛрдбреЗрд▓ рдкрд░ confirmationRequiredSignal
, рдПрдХ рдЕрд▓рд░реНрдЯ рд╡реНрдпреВ рдлреЗрдВрдХрддрд╛ рд╣реИ рдФрд░ рдЕрд▓рд░реНрдЯ рд╡реНрдпреВ рдкрд░ рдмрдЯрди рдХреЛ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдХрдорд╛рдВрдб рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдХрдорд╛рдВрдб рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмрдЯрди рдХреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдорд┐рд▓ рдЬрд╛рдПрдЧреА, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ, рддреЛ рдЖрдк рдХрд░реЗрдВрдЧреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ confirmed
рдорд╛рди рдореЗрдВ рдореИрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред рдПрдХ рдмрд╛рд░ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдмрдЯрди рдЯреИрдк рдХрд░рддрд╛ рд╣реИ, рддреЛ self.confirmationCommand
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ confirmed
рдорд╛рди рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЪрдХреНрд░ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдк рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ deleteCommand
рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд╢рд╛рдпрдж self.deleteCommand.errors
рджреЗрдЦрдХрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдпрд╛ рдХреБрдЫ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╛ рдЖрдк рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЦрд╛рд▓реА рд╕рд┐рдЧреНрдирд▓ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдореЙрдбрд▓ рдЕрд▓рд░реНрдЯ рд╡реНрдпреВ, рдПрдХреНрд╢рди рд╢реАрдЯ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред RACCommands
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред
@ рдХреЛрдирдХреЛ рд╢рд╛рдпрдж рд╕рд╣реА рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреБрд╖реНрдЯрд┐ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╛рдиреЛрдВ рд╕реЗ рдЪрдпрди рдХрд░рдиреЗ рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЬреЗрдм рдореЗрдВ рд░рдЦрдирд╛ рдЕрднреА рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ log in with twitter
рдмрдЯрди рдкрд░ рдЯреИрдк рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рд░реА рд░рдЦрдиреЗ (рдпрд╛ рд░рджреНрдж рдХрд░рдиреЗ) рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рдЯреНрд╡рд┐рдЯрд░ рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ (рдпрджрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХрд╛рдзрд┐рдХ рд╣реИрдВ)ред (рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрднреА рдмрдирд╛рдпрд╛ рд╣реИред)
@sprynmr рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдПрдХ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди IMO рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЧрдпрд╛ рдерд╛ред
рдореИрдВрдиреЗ рд╕рдВрдкрддреНрддрд┐ рдХреЛ deleteWithConfirmation:
рдирд╛рдордХ рдПрдХ рд╡рд┐рдзрд┐ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬреЛ рдПрдХ рдПрдХрд▓ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ - рдПрдХ рдмреНрд▓реЙрдХ рдЬреЛ рдПрдХ RACSignal
рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдПрдХрд▓ рдорд╛рди рднреЗрдЬрдХрд░ рдкреБрд╖реНрдЯрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, @YES
, рдпрд╛ @NO
рдХрдорд╛рдВрдб рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕рд┐рдЧреНрдирд▓ рд╣реИ рдЬреЛ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдкрд╣рд▓рд╛ рдорд╛рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕рд┐рдЧреНрдирд▓ рдкрд░ рдореИрдк рдХрд░рддрд╛ рд╣реИ - рдбрд┐рд▓реАрдЯ рд╕рд┐рдЧреНрдирд▓ рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЦрд╛рд▓реА рд╕рд┐рдЧреНрдирд▓:
- (RACCommand *)deleteWithConfirmation:(RACSignal*(^)(void))signalBlock
{
NSParameterAssert(signalBlock);
@weakify(self);
return [[RACCommand alloc] initWithEnabled:nil signalBlock:^RACSignal *(id input) {
@strongify(self);
RACSignal *confirmationSignal = signalBlock();
return [[confirmationSignal take:1] flattenMap:^RACStream *(id value) {
if ([value boolValue]) {
return [self doDeletion]; // for example
}
else {
return [RACSignal empty];
}
}];
}];
}
рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рдмрдЯрди рдкрд░ рдХрдорд╛рдВрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╡рд╛рдпрд░ рдХрд░рддрд╛ рд╣реВрдВ:
self.deleteButton.rac_command = [self.viewModel deleteWithConfirmation:^RACSignal *{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Delete Widget" message:@"Are you sure you want to delete this widget?" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Delete", nil];
[alert show];
return [alert.rac_buttonClickedSignal map:^id(NSNumber *buttonIndex) {
return @([buttonIndex integerValue] == 1);
}];
}];
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдЬреЛ рд╕рдВрдХреЗрдд рд▓реМрдЯрд╛рддрд╛ рд╣реВрдВ рд╡рд╣ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд┐рдП рдЧрдП рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рд╣рд╛рдВ/рдирд╣реАрдВ рдорд╛рди рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдирдХреНрд╢рд╛ рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдпрд╣ рдЕрднреА рднреА рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓рдЪреАрд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдмрд╕ рдПрдХ рдРрд╕реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдкрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдПрдХрд▓ рд╣рд╛рдБ рдорд╛рди рднреЗрдЬрддрд╛ рд╣реИ рдпрджрд┐ рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡реНрдпреВ рдореЙрдбрд▓ рдкрд░ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╕рдорд╛рд╣рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- (RACCommand *)deleteWithoutConfirmationCommand
{
return [self deleteWithConfirmation:^RACSignal *{
return [RACSignal return:@YES];
}]
}
рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рднреА рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдлрд╛рдЗрд▓ рдХрд░ рджреВрдВрдЧрд╛ред
@sprynmr рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдЙрддреНрддрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╣реИрд░рд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред
рдмреНрд▓реЙрдХ рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕рд┐рдЧреНрдирд▓ рдХрднреА рднреА рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ ( self.confirmationCommand.executionSignals.switchToLatest
)ред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрдорд╛рдВрдб рд╣рдореЗрд╢рд╛ рдирд┐рд╖реНрдкрд╛рджрди рдореЛрдб рдореЗрдВ рд░рд╣реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ?
self.deleteCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id objectToDelete) {
[return self.confirmationCommand.executionSignals
switchToLatest]
flattenMap:^id(NSNumber *confirmed) {
if(confirmed) {
return [self deleteObject:objectToDelete];
} else {
return [RACSignal error:someErrorWithAMessageMaybe];
}
}];
}];
@haifengkao рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЬреЛрдбрд╝реЗрдВ, рдЬреИрд╕реЗ take:1
рдмрд╛рдж switchToLatest
рд╡рд╣рд╛рдВ рдПрдХ рд░рд┐рдЯреЗрди рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рд▓рд┐рдП рднреА рджреЗрдЦреЗрдВред self
рд▓рд┐рдП рдЕрдкрдиреЗ рдПрдХрд╛рдзрд┐рдХ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ @ рдордЬрдмреВрдд/рдХрдордЬреЛрд░ рдХрд░реЗрдВ