
"рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрди-рд╕реА рдореЗрдВ рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг", рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
viewWillAppear: (BOOL) рдПрдирд┐рдореЗрдЯреЗрдб ) рд╡рд┐рд╖рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдкреНрд░рддрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ рд╣реА рдЯреВрдЯ рдЧрдИ рд╣реИрдВ, рдЬрдм рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рд╕реБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдХреИрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдСрдмреНрдЬрд░реНрд╡рд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ C ++ 0x рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдХрдареЛрд░ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
new TLSignal<NSString *, BOOL>(self);
рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдБрдХрд┐ C ++ рдХрд╛ рдореЗрд░рд╛ рдЬреНрдЮрд╛рди рджреБрд░реНрд▓рдн рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдБрдЧрд╛ред
рд░реБрдЪрд┐ рдХреГрдкрдпрд╛ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░
рдЕрдХреНрд╕рд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ (рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИ, рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди, рдФрд░ рдЗрд╕реА рддрд░рд╣), рдЬрдмрдХрд┐ рдПрдХ рд╕реЗ рдХрдИ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдХрдИ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХреЗред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рддреБрд░рдВрдд рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдЙрдкрдХрд░рдг рд╣рдореЗрдВ рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ?
- рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗрдВрджреНрд░ - рдмреЗрд╢рдХ, рдиреЗрдХрд╛рдВ рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЕрдкрдирд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рднреАрддрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рд╡реИрд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЦрд░рд╛рдм рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдкреАрдЖрдИ рд╣реИред
- рдХреА-рд╡реИрд▓реНрдпреВ рдСрдмреНрдЬрд░реНрд╡рд┐рдВрдЧ (KVO) рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЬреИрд╕реА рдЕрджреНрднреБрдд рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдЕрдкрдиреЗ рд╕рднреА рдЖрдХрд░реНрд╖рдг рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред
рдСрдмреНрдЬрд░реНрд╡рд░ рдкреИрдЯрд░реНрди
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рд╡рд┐рд╡рд░рдг рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛:
- рд╣рдорд╛рд░реЗ рдЖрдпреЛрдЬрдиреЛрдВ рдХреЗ рд╢реНрд░реЛрддрд╛ рдирд┐рдпрдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдмреНрд▓реЙрдХ рд╣реЛрдВрдЧреЗред
- рдореЗрд░реЗ рд╕рдВрдХреЗрддреЛрдВ рдХреА рдорджрдж рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд┐рдирд╛рд╢ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
- рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рджреМрд░рд╛рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЧрдИ рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрдЦреНрдпрд╛ C ++ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреАред
рддреЛ, рд╕рдВрдХреЗрдд рдШреЛрд╖рдгрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
new TLSignal<NSString *, BOOL>(self);
рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐:
- рд╣рдордиреЗ рдПрдХ рд╕рдВрдХреЗрдд рдмрдирд╛рдпрд╛ рдЬреЛ 2 рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ: рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ (NSString) рдФрд░ рдПрдХ рдмреВрд▓рд┐рдпрди (BOOL)
- рд╣рдорд╛рд░реЗ рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕реНрд╡рдпрдВ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рдд рд╡рд╣ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕рдВрдХреЗрдд рдирд┐рд░реНрдорд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рд╕реБрдирдиреЗ рд╡рд╛рд▓рд╛ рдмреНрд▓реЙрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
auto observerBlock = ^(id target, NSString *stringParam, BOOL boolParam) { NSLog(@"%@ %@ %d", target, stringParam, boolParam); };
рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдИрдбреА рд▓рдХреНрд╖реНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╕рд┐рдЧреНрдирд▓ рдХреЗ "рдзрд╛рд░рдХ" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдХреЛрдб рдПрдХ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдореИрдВ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдлрд╛рдпрджреЗ рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
ExampleViewController.h
#import <UIKit/UIKit.h> #import "Signals.h" @interface ExampleViewController : UIViewController @property (nonatomic, readonly) TLSignal<UIView *> *viewDidLoadSignal; @end
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд╣рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╡реНрдпреВрдбреАрдбрд▓рдбрд┐рд╕рдЧреНрдирд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рдЧреНрдирд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдпреВрдЖрдИрд╡рд╛рдИрдИрд╡рд╛рдИ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред
ExampleViewController.mm
#import "ExampleViewController.h" @implementation ExampleViewController @synthesize viewDidLoadSignal = _viewDidLoadSignal; -(TLSignal<UIView *> *)viewDidLoadSignal { if(!_viewDidLoadSignal) { // ( ) _viewDidLoadSignal = new TLSignal<UIView *>(self); } return _viewDidLoadSignal; } -(void)viewDidLoad { [super viewDidLoad]; // , UIView self.viewDidLoadSignal->notify(self.view); } @end
AppDelegate.mm
#import "AppDelegate.h" #import "ExampleViewController.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)options { UIWindow window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.viewController = [[ExampleViewController alloc] initWithNibName:@"ViewController" bundle:nil]; // , UIView self.viewController.viewDidLoadSignal->addObserver(^(TLSignal<UIView *> *signal, UIView *targetView) { targetView.backgroundColor = [UIColor blackColor]; }); self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; return YES; } @end
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрд┐рд╕ рдХреЛрдб рдореЗрдВ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдорд┐рдореА рдФрд░ рдирд╣реАрдВред рдЕрдиреНрдпрдерд╛, рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЛрдб рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдкреНрд▓рд╕ рдореИрдЬрд┐рдХ рдХреЛ рдирд╣реАрдВ рд╕рдордЭреЗрдЧрд╛!рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдкреВрд░реА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ Objective-C рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2.5 рдпрд╛ 3.0) рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдорд╛рдирдХ рд╕реНрддрд░ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рддрдХ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЖрд╕рд╛рди рд╣реИ, рдХреЛрдб рдЫреЛрдЯреЗ рдХреЗ рд╕рд╛рде рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ C ++ рдореЗрдВ рдЬреНрдЮрд╛рди, рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ :)):
рдЧреАрдерд╣рдм рдкрд░ TLSignalsрджреВрд╕рд░реЗ рджрд┐рди рдпрд╣ рдХреЛрдХреЛрдкреЛрдбреНрд╕ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдФрд░ рдЬрдм рддрдХ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЖрдк рдмрд╕ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП
TLSignals.h рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрдврд╝рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
GitHub рдкрд░ TLSignalsTests.mmрдореИрдВ рдкрд░рд┐рд╡рд░реНрдзрди рдФрд░ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛, рд╕рд╛рде рд╣реА C ++ рдХреА рдУрд░ рд╕реЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрдордЬреЛрд░ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЕрдкрдиреА рдирд╛рдХ рдХреЛ рдкреЛрдЫреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рднреА рд╕реАрдЦрддреЗ рд╣реИрдВ;)
рдпрджрд┐ рдЯрд╛рдЗрдкреЛрд╕ рдпрд╛ рд╡реНрдпрд╛рдХрд░рдг рд╕рдВрдмрдВрдзреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢ рдореЗрдВ рд▓рд┐рдЦреЗрдВ рддрд╛рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ
- github.com/bsideup/TLSignals - рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╕реНрд╡рдпрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпред
- en.wikipedia.org/wiki/Observer_pattern - рдСрдмреНрдЬрд░реНрд╡рд░ рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд┐рд╡рд░рдгред
- en.wikipedia.org/wiki/Variadic_Templates - рд╡рд░рджрд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
- habrahabr.ru/post/101430 - рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд▓реЗрдХрд┐рди рдПрдХ рджреЗрд╢реА рд╣реИрдмрд░ рдХреЗ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВред