2017-04-18 3 views
0

Angenommen, ich habe beobachtbare A, und ich versuche, beobachtbare B erstellen, die zwei Ereignisse ausgibt: die erste, wenn A ein Ereignis ausgibt, und die zweite 5 Sekunden später.RxSwift: Wie kann man einen Observablen einen anderen auslösen lassen?

Bisher habe ich folgendes:

self.B = Observable.create { [unowned self] observer in 
      self.A.subscribe(onNext: { 
       observer.onNext(0) 
       self.delay(5) { 
        observer.onNext(1) 
       } 
      }) 
      return Disposables.create() 
     } 

Dies funktioniert, aber ich fühle mich uncomforatble zeichn zu A aus einem Verschluss. Gibt es einen schöneren Weg, es zu tun?

Danke!

Antwort

1

Die Lösung ist die a Observable für die verzögerte beobachtbar zu verwenden. Unten ist der Code, um es zu tun, zusammen mit einem Proof of Concept.

let a = button.rx.tap.asObservable() 
let delay = a.delay(5.0, scheduler: MainScheduler.instance) 
let b = Observable.of(a, delay).merge() 

b.subscribe(onNext: { 
    print("foo") 
}).disposed(by: bag) 
+0

Ich verwende eine heiße Observable für 'a' in den oben genannten. Wenn Ihr 'a' ein kaltes Observable ist, müssen Sie' share() 'oder' publish() 'es. –

+0

funktioniert einfach, danke! – Yotam

Verwandte Themen