2015-10-27 1 views

Répondre

0

Un signal de temps pouvait être effectué via l'opérateur take:. Vous avez juste besoin de passer un argument pour le nombre de fois requis pour effectuer un signal. Après une telle quantité d'exécutions, cette passerelle sera complètement fermée et aucune donnée supplémentaire ne sera transmise dans le bloc subscribeNext:. Dans votre cas, ce montant serait égal 1.

RACSignal *requestConfigurationSignal = ... 
[[requestSignal 
    take:1] 
    subscribeNext:^(id value){ 
    NSLog(@"Request in progress") 
}] 
+0

On dirait qu'ils veulent pouvoir s'abonner plusieurs fois mais ne faire qu'une seule requête web. Autrement dit, ils veulent que le résultat soit mis en cache. C'est là que les opérateurs de rejeu sont utiles. – powerj1984

1

Votre signal faire son travail chaque fois qu'il est abonné à moins que vous faites quelque chose explicite pour empêcher cela. On dirait que ce que vous voulez ici est l'opérateur replayLast. Cet opérateur mettra en cache la dernière valeur émise de votre signal et l'émettra lorsque votre signal sera à nouveau souscrit au lieu de refaire le travail initial.

Lire sur les opérateurs « replay » ici: http://spin.atomicobject.com/2014/06/29/replay-replaylast-replaylazily/

0

Utilisez une propriété et une action dont les valeurs sont liées à cette propriété. Ensuite, ne déclenchez l'action que si nécessaire pour actualiser la valeur de la propriété.