2017-07-11 5 views
1

Ich führe eine Aufgabe aus, wenn die Anwendung in den Vordergrund tritt. Ich möchte diese Aufgabe auch ausführen, sobald mein Ansichtsmodell initialisiert wird.RxSwift Optimieren von Triggern

Wie kann ich dies schreiben, um zu vermeiden, den Aufgabencode zu kopieren und einzufügen? Derzeit sieht der Code wie folgt aus:

init(dependencies: Dependencies) { 
     self.dependencies = dependencies 

     dependencies.apiClient.notificationsCount() 
      .map { $0.value > 0 ? String($0.value) : nil } 
      .bind(to: tabBadgeValue) 
      .disposed(by: disposeBag) 
     dependencies.notification.notification(for: .appWillEnterForeground) 
      .map { _ in() } 
      .flatMapLatest(dependencies.apiClient.notificationsCount) 
      .map { $0.value > 0 ? String($0.value) : nil } 
      .bind(to: tabBadgeValue) 
      .disposed(by: disposeBag) 
    } 

Antwort

1

Sie startWith verwenden könnte ein nächstes Ereignis zu emittieren, bevor die erste Meldung empfangen:

init(dependencies: Dependencies) { 
    self.dependencies = dependencies 

    dependencies.notification.notification(for: .appWillEnterForeground) 
     .map { _ in() } 
     .startWith(()) 
     .flatMapLatest(dependencies.apiClient.notificationsCount) 
     .map { $0.value > 0 ? String($0.value) : nil } 
     .bind(to: tabBadgeValue) 
     .disposed(by: disposeBag) 
} 
+0

Dies ist genau die Lösung, für die ich suchte. –