2016-04-11 25 views
7

Sadece Gözlemlenebilir var, bu yalnızca flatMap/map'u tetiklemek için kullanılır. Bu yüzden sadece Next etkinliğine ve asla bir değere ihtiyacım var. Kendi konseptimi böyle bir çöp değeri için kullanabilirdim, ama bunun için bir RxSwift sözleşmesi var mı diye merak ediyorum.Sonraki olaylarda bir değere ihtiyaç duymadan Gözlemlenebilir için tercih edilen bir tür var mı?

İşte uğraşıyorum ne:

Bu örnekte
// 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 
} 

, triggeringObservable bize username() çağrılacak hazır olduğunu bildirir kitaplığında bazı mülkiyet rx_observer olduğunu.

cevap

9

Bu amaç için bir Observable<Void> kullanabilirsiniz.

let triggerObservable = Observable<Void>.just() 

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

veya örnekte: öylesine gibi hızlı 4'e ile

let triggeringObservable: Observable<Void> 

// ... 

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

, Xcode hiçbir argüman ile 'adil' çağırmak olamaz diyecekler.

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

(ve muhtemelen daha eski) Bir Boşluk ilişkili türünü bekliyor bir yönteme bağımsız değişken olarak boş bir demet yapabilirsiniz: Şu anda aşağıdaki geçici çözümü kullanıyoruz.

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

Yoksa Void durum için herhangi args ile OnNext() aşırı bir uzantı tanımlayabilirsiniz:

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

... 
triggerObservable.onNext()