Reactivecocoa: NSControl -rac_textSignal рддрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд╛рда рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реЛ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЕрдЧре░ 2013  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ReactiveCocoa/ReactiveCocoa

рдпрджрд┐ рдореИрдВ -setStringValue: рдпрд╛ -setAttributedStringValue: рдорд╛рдзреНрдпрдо рд╕реЗ -setStringValue: NSTextField рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ NSControlTextDidChangeNotification рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ -rac_textSignal рдЬреАрдд рдЧрдП 'рдпрд╛ рддреЛ рдкрд░рд┐рд╡рд░реНрддрди рдЙрдард╛рдУред рдпрд╣ рдХреЗрд╡рд▓ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкрд╛рда рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛред

рдЖрд╕рд╛рди рдлрд┐рдХреНрд╕ рдмрд╕рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдХреЙрд▓ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -rac_signalForSelector: рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ( NSControlTextDidChangeNotification рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдмрдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ @indragiek рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред
рдХрд╣реЛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ NSString* name ред
рдЕрдкрдиреЗ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ, рдЯреЗрдХреНрд╕реНрдЯ рдлреАрд▓реНрдб рдХреЛ рд╡реНрдпреВ рдореЙрдбрд▓ рд╕реЗ рдмрд╛рдВрдзрддреЗ рд╕рдордп рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд:
[[RACSignal merge:@[self.nameField.rac_textSignal, RACObserve(self.nameField, text)]]<br i="9"/> subscribeNext:^(NSString* text){<br i="10"/> self.viewModel.name = text;<br i="11"/> }];`

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрдм рднреА рдкрд╛рда рд╕рдВрдХреЗрдд рдЖрдЧ рдФрд░ рдкрд╛рда рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗред

рд╕рднреА 8 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣рд╛рдВ AppKit рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░рддрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдмрдЧ рдирд╣реАрдВред рдпрд╣ рдЕрдЬреАрдм рд╣реЛрдЧрд╛, IMO, rac_textSignal рдХреЗ рд▓рд┐рдП рдЙрди рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВред

рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдо рддреМрд░ рдкрд░ рдРрд╕реА рдШрдЯрдирд╛рдПрдВ рдЬреЛ рджреГрд╢реНрдп рдкрд░рдд рддрдХ рдлреИрд▓рддреА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ "рдЕрдВрддрд┐рдо" рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдкрдХреЛ рдЙрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рджреГрд╢реНрдп рдореЙрдбрд▓ рдпрд╛ рдЙрди рд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ?

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг: рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдФрд░ рдПрдХ рд╕рд╛рдлрд╝ рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдлреЙрд░реНрдо рд╣реИ, рдХреНрд▓реАрдпрд░ рд╕реЗрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ stringValue рд╣рд░ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдкрд░ @"" ред рдореИрдВ рдХреБрдЫ рдлреЙрд░реНрдо рд╕рддреНрдпрд╛рдкрди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП rac_textSignal рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдХреНрд▓реАрдпрд░ рд╣реЛрдиреЗ рдкрд░ рд╕рддреНрдпрд╛рдкрди рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ -rac_textSignal рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдЙрдард╛рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ NSControlTextDidChangeNotification рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рднрдпрд╛рдирдХ рдмрд╛рдд рд╣реИ: рдЯреНрд░реЛрд▓рдлреЗрд╕:

MVVM рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╕рд╣реА рдбрд┐рдЬрд╝рд╛рдЗрди _view model_ рдкрд░ рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рди рдХрд┐ рджреГрд╢реНрдп рдореЗрдВред рджреГрд╢реНрдп рдореЙрдбрд▓ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рджреЛ-рддрд░рдлрд╝рд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реЛрдЧреАред рдлрд┐рд░, рд╕реНрдкрд╖реНрдЯ рдмрдЯрди рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рд╣реИ: рдирд┐рдЦрд░ рдЙрдарддреА рд╣реИред

MVC рдХрд╛рдлреА рд╣рдж рддрдХ рдПрдХ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рдмрд╕ рдПрдХ рдордзреНрдпрд╕реНрде рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рдореЙрдбрд▓ рдХреЗ рдмрдЬрд╛рдпред

рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рд╡рд╛рд▓ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

FWIW, рднрд▓реЗ рд╣реА рдХреЛрдХреЛ рдмрд┐рдВрджрд┐рдВрдЧреНрд╕ тДв рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рджреЛ-рддрд░рдлрд╛ рдмрд╛рдБрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП RACChannel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдмрдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ @indragiek рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред
рдХрд╣реЛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ NSString* name ред
рдЕрдкрдиреЗ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ, рдЯреЗрдХреНрд╕реНрдЯ рдлреАрд▓реНрдб рдХреЛ рд╡реНрдпреВ рдореЙрдбрд▓ рд╕реЗ рдмрд╛рдВрдзрддреЗ рд╕рдордп рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд:
[[RACSignal merge:@[self.nameField.rac_textSignal, RACObserve(self.nameField, text)]]<br i="9"/> subscribeNext:^(NSString* text){<br i="10"/> self.viewModel.name = text;<br i="11"/> }];`

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрдм рднреА рдкрд╛рда рд╕рдВрдХреЗрдд рдЖрдЧ рдФрд░ рдкрд╛рда рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗред

@startupthekid рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдорджрдж рдХрд░рддрд╛ рд╣реИред

@startupthekid рдзрдиреНрдпрд╡рд╛рдж рдПрдХ рдЯрди!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

simonxcheng picture simonxcheng  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

v-silin picture v-silin  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tunidev picture tunidev  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mdiep picture mdiep  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

samidalouche picture samidalouche  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ