6

unwrapOptional現在、ストリーム内のオプションの入力を安全にアンラップする関数を作成しました。

    func unwrapOptional<T>(x: Optional<T>) -> Observable<T> {
       return x.map(Observable.just) ?? Observable.empty()
    }

    let aOpt: String? = "aOpt"
    _ = Observable.of(aOpt).flatMap(unwrapOptional).subscribeNext { x in print(x)}

    let aNil: String? = nil
    _ = Observable.of(aNil).flatMap(unwrapOptional).subscribeNext { x in print(x)}

    let a: String = "a"
    _ = Observable.of(a).flatMap(unwrapOptional).subscribeNext { x in print(x)}

   // output 
    aOpt
    a

アーカイブしたいのはflatMap(unwrapOptional)、たとえば、を使用する代わりに便利な関数を作成することです

Observable.of(a).unwrapOptional()

私がやろうとしたことですが、コンパイルされません...

extension ObservableType {
    func unwrapOptional<O : ObservableConvertibleType>() -> RxSwift.Observable<O.E> {
        return self.flatMap(unwrapOptional)
    }
}
4

4 に答える 4

6

https://github.com/RxSwiftCommunity/RxSwift-Extunwrapでチェックアウト:)

またはhttps://github.com/RxSwiftCommunity/RxOptional

現時点ではRxOptional、個人的なニーズに使用する必要がありますが
RxSwift-Ext今後 2 ~ 3 か月で指数関数的に成長します :)

于 2016-04-19T15:50:44.717 に答える