ios reactive-cocoa

ios - Cómo utilizar el Cacao Reactivo con notificaciones.



reactive-cocoa (3)

¿Cómo puedo crear una señal de un nombre de notificación? Por ejemplo, quiero ir desde:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidChange:) name:kTTCurrentUserLoggedOffNotification object:nil];

a algo como:

[signalForName(kTTCurrentUserLoggedOffNotification) subscribeNext:^(id x){ ... }];


En las RACExtensions puede encontrar la categoría NSNotificationCenter (RACSupport) . Eso tiene un método para este propósito:

- (RACSignal *)rac_addObserverForName:(NSString *)notificationName object:(id)object;


Versión Swift utilizando ReactiveCocoa 4.1 :

NSNotificationCenter.defaultCenter() .rac_addObserverForName(UIKeyboardWillShowNotification, object: nil) .takeUntil(self.rac_willDeallocSignal()) .subscribeNext { (_) in print("UIKeyboardWillShowNotification") }


-[NSNotificationCenter rac_addObserverForName:object:] devuelve una señal infinita. Puedes suscribirte de esta forma.

C objetivo

[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] takeUntil:[self rac_willDeallocSignal]] subscribeNext:^(id x) { NSLog(@"Notification received"); }];

Rápido

NSNotificationCenter.defaultCenter() .rac_addObserverForName(UIKeyboardWillShowNotification, object: nil) .takeUntil(self.rac_willDeallocSignal()) .subscribeNext { (_) in print("Notification received") }

Esta señal es como se dice infinita. Si necesita que esta señal / suscripción esté vinculada a la vida útil del takeUntil: puede agregar takeUntil: con rac_willDeallocSignal como este:

C objetivo

[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] takeUntil:[self rac_willDeallocSignal]] subscribeNext:^(id x) { NSLog(@"Notification received"); }];

Rápido

NSNotificationCenter.defaultCenter() .rac_addObserverForName(UIKeyboardWillShowNotification, object: nil) .takeUntil(self.rac_willDeallocSignal()) .subscribeNext { (_) in print("Notification received") }