web-dev-qa-db-ja.com

Nextイベントで値を必要としないObservableの優先タイプはありますか?

flatMap/mapのトリガーにのみ使用されるObservableがあります。したがって、Nextイベントのみが必要であり、値は必要ありません。このようなゴミの値に独自の概念を使用することもできますが、RxSwiftの規則があるかどうか疑問に思っています。

これが私が扱っているものです:

_// 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はライブラリ内のいくつかのプロパティの_rx_observer_であり、username()を呼び出す準備ができていることを通知します。

13
solidcell

この目的には、単にObservable<Void>を使用できます。そのようです:

   let triggerObservable = Observable<Void>.just()

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

またはあなたの例では:

let triggeringObservable: Observable<Void> 

// ...

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

これは私にとってSwift 4.1:

Observable<Void>.just(Void())
3
Rafa0809

Swift 4(およびおそらくそれ以前)では、Void関連する型を期待するメソッドに、引数として空のタプルを渡すことができます。

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

または、Void case:の場合、引数なしでonNext()をオーバーロードする拡張機能を定義できます。

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

...
triggerObservable.onNext()
3
Pat Niemeyer

これは私にとってSwift 4.2:

Observable<Void>.just(())
1
Radek

Swift 4の場合、Xcodeは、引数なしで「just」を呼び出すことはできないと言います。現在、次の回避策を使用しています。

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