рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдСрдмреНрдЬрд░реНрд╡рд░ рдкреИрдЯрд░реНрди рдпрд╛ рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА ++ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ



"рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрди-рд╕реА рдореЗрдВ рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг", рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, viewWillAppear: (BOOL) рдПрдирд┐рдореЗрдЯреЗрдб ) рд╡рд┐рд╖рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдкреНрд░рддрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ рд╣реА рдЯреВрдЯ рдЧрдИ рд╣реИрдВ, рдЬрдм рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рд╕реБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдХреИрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдореИрдВ рдЖрдкрдХреЛ рдСрдмреНрдЬрд░реНрд╡рд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ C ++ 0x рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдХрдареЛрд░ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
new TLSignal<NSString *, BOOL>(self); 

рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдБрдХрд┐ C ++ рдХрд╛ рдореЗрд░рд╛ рдЬреНрдЮрд╛рди рджреБрд░реНрд▓рдн рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдБрдЧрд╛ред

рд░реБрдЪрд┐ рдХреГрдкрдпрд╛ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░


рдЕрдХреНрд╕рд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ (рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИ, рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди, рдФрд░ рдЗрд╕реА рддрд░рд╣), рдЬрдмрдХрд┐ рдПрдХ рд╕реЗ рдХрдИ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдХрдИ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХреЗред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рддреБрд░рдВрдд рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдЙрдкрдХрд░рдг рд╣рдореЗрдВ рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ?
  1. рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗрдВрджреНрд░ - рдмреЗрд╢рдХ, рдиреЗрдХрд╛рдВ рдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЕрдкрдирд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рднреАрддрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рд╡реИрд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЦрд░рд╛рдм рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдкреАрдЖрдИ рд╣реИред
  2. рдХреА-рд╡реИрд▓реНрдпреВ рдСрдмреНрдЬрд░реНрд╡рд┐рдВрдЧ (KVO) рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЬреИрд╕реА рдЕрджреНрднреБрдд рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдЕрдкрдиреЗ рд╕рднреА рдЖрдХрд░реНрд╖рдг рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред


рдСрдмреНрдЬрд░реНрд╡рд░ рдкреИрдЯрд░реНрди


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦ рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рд╡рд┐рд╡рд░рдг рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛:



рддреЛ, рд╕рдВрдХреЗрдд рдШреЛрд╖рдгрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
  new TLSignal<NSString *, BOOL>(self); 

рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐:


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рд╕реБрдирдиреЗ рд╡рд╛рд▓рд╛ рдмреНрд▓реЙрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 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 ++ рдХреА рдУрд░ рд╕реЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрдордЬреЛрд░ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЕрдкрдиреА рдирд╛рдХ рдХреЛ рдкреЛрдЫреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рднреА рд╕реАрдЦрддреЗ рд╣реИрдВ;)

рдпрджрд┐ рдЯрд╛рдЗрдкреЛрд╕ рдпрд╛ рд╡реНрдпрд╛рдХрд░рдг рд╕рдВрдмрдВрдзреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢ рдореЗрдВ рд▓рд┐рдЦреЗрдВ рддрд╛рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ


Source: https://habr.com/ru/post/In162235/


All Articles