2016-04-11 15 views
7

Ho un Osservabile che viene utilizzato solo per l'attivazione di flatMap/map. Quindi ho sempre e solo bisogno dell'evento Next e mai un valore. Potrei usare il mio concetto per un valore simile a un cestino, ma mi chiedo se c'è una convenzione RxSwift per questo.Esiste un tipo preferito per un Observable senza che sia necessario un valore negli eventi Next?

Ecco cosa ho a che fare con:

// I'd rather not have an Element type that someone might use 
let triggeringObservable: Observable<SomeSessionClass> 

// ... 

triggeringObservable.map { _ -> String in // The actual value is ignored 
    return SomeLibrary.username() // `username()` is only ready when `triggeringObservable` sends Next 
} 

In questo esempio, è triggeringObservablerx_observer su alcune proprietà nella biblioteca che farci sapere che username() è pronto per essere chiamato.

risposta

9

È possibile utilizzare semplicemente uno Observable<Void> per questo scopo. In questo modo:

let triggerObservable = Observable<Void>.just() 

    triggerObservable.subscribeNext() { 
     debugPrint("received notification!") 
    }.addDisposableTo(disposeBag) 

o nel tuo esempio:

let triggeringObservable: Observable<Void> 

// ... 

triggeringObservable.map { Void -> String in // The actual value is ignored 
    return SomeLibrary.username() 
} 
0

Con rapida 4, Xcode dirà, non è possibile richiamare 'solo' senza argomenti. attualmente stiamo usando seguente soluzione:

Observable.just(Void.self).subscribe(onNext: { Void -> String in 
     debugPrint("triggered!") 
    }).addDisposableTo(disposeBag) 
0

a Swift 4 (e probabilmente prima) si può passare una tupla vuota come argomento di un metodo che prevede un tipo void associato.

var triggerObservable = PublishSubject<Void>() 
... 
triggerObservable.onNext(()) // "()" empty tuple is accepted for a Void argument 

Oppure si può definire un prolungamento sovraccaricare onNext() senza args per il caso Void:

extension ObserverType where E == Void { 
    public func onNext() { 
     onNext(()) 
    } 
} 

... 
triggerObservable.onNext()