RxSwiftで一つ前の値と現在の値を両方Subscribeする方法
Observable.zipを用いて、初期値を与え1つ目の値が流れてきたときにSubscribeする方法
と初期値を与えずに2つ目の値が流れたときにSubscribeする方法
があります。
初期値を与える場合
extension ObservableType {
func preSubscribe(startWith e: Self.E,
onNext: (((Self.E, Self.E)) -> Void)? = nil,
onError: ((Error) -> Void)? = nil,
onCompleted: (() -> Void)? = nil,
onDisposed: (() -> Void)? = nil) -> Disposable {
return Observable.zip(self.startWith(e), self)
.subscribe(onNext: onNext, onError: onError, onCompleted: onCompleted, onDisposed: onDisposed)
}
}
初期値を与えない場合
extension ObservableType {
func preSubscribe(onNext: (((Self.E, Self.E)) -> Void)? = nil,
onError: ((Error) -> Void)? = nil,
onCompleted: (() -> Void)? = nil,
onDisposed: (() -> Void)? = nil) -> Disposable {
return Observable.zip(self, self.skip(1))
.subscribe(onNext: onNext, onError: onError, onCompleted: onCompleted, onDisposed: onDisposed)
}
}
使い方
let sequence = Observable.of(1, 2, 3)
sequence
.preSubscribe(startWith: 0, onNext: { n0, n1 in
print(n0, n1)
})
.disposed(by: disposeBag)
// (0, 1), (1, 2), (2, 3)
sequence
.preSubscribe(onNext: { n0, n1 in
print(n0, n1)
})
.disposed(by: disposeBag)
// (1, 2), (2, 3)
Author And Source
この問題について(RxSwiftで一つ前の値と現在の値を両方Subscribeする方法), 我々は、より多くの情報をここで見つけました https://qiita.com/touyu/items/d01067d141ebd2fbb037著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .