Swift3 RxSwift:重复(完成的)流
假设我有一个按钮,可以用来启动和停止(切换)一个动作Swift3 RxSwift:重复(完成的)流,swift3,observable,rx-swift,reactivex,rx-cocoa,Swift3,Observable,Rx Swift,Reactivex,Rx Cocoa,假设我有一个按钮,可以用来启动和停止(切换)一个动作 let toggleStream: Observable<Bool> = toggleBtn.rx.tap.scan(false) { state, _ in !state } 这是第一次非常有效。我可以按下按钮,Observable开始发出它的Ints。也停止工作。遗憾的是,我无法再次启动它,因为流已经完成。当用户再次切换按钮时,我如何重新启动/重试/重复它?以下是我在操场上的操作方式。您应该能够推断: //: Playgro
let toggleStream: Observable<Bool> = toggleBtn.rx.tap.scan(false) { state, _ in !state }
这是第一次非常有效。我可以按下按钮,
Observable
开始发出它的Ints
。也停止工作。遗憾的是,我无法再次启动它,因为流已经完成。当用户再次切换按钮时,我如何重新启动/重试/重复它?以下是我在操场上的操作方式。您应该能够推断:
//: Playground - noun: a place where people can play
import RxSwift
let toggleButton = PublishSubject<Void>()
let toggleStream: Observable<Bool> = toggleButton
.scan(false) { state, _ in !state }
.debug()
.shareReplayLatestWhileConnected()
let emit = toggleStream
.filter { $0 }
.flatMapLatest { _ in
Observable<Int>.interval(2.0, scheduler: MainScheduler.instance)
.takeUntil(toggleStream.filter { !$0 })
}
_ = emit.subscribe( {
print($0)
})
toggleButton.onNext()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5.0) {
toggleButton.onNext()
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 11.0) {
toggleButton.onNext()
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 17.0) {
toggleButton.onNext()
}
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
/:操场-名词:人们可以玩耍的地方
导入RxSwift
让toggleButton=PublishSubject()
让toggleStream:Observable=toggleButton
.scan(false){state,{in!state}
.debug()
.shareReplayLatestWhileConnected()
让emit=toggleStream
.filter{$0}
.flatmap最新{uu英寸
可观察的.interval(2.0,调度程序:MainScheduler.instance)
.takeUntil(toggleStream.filter{!$0})
}
_=emit.subscribe({
印刷品(0美元)
})
toggleButton.onNext()
DispatchQueue.main.asyncAfter(截止日期:DispatchTime.now()+5.0){
toggleButton.onNext()
}
DispatchQueue.main.asyncAfter(截止日期:DispatchTime.now()+11.0){
toggleButton.onNext()
}
DispatchQueue.main.asyncAfter(截止日期:DispatchTime.now()+17.0){
toggleButton.onNext()
}
导入PlaygroundSupport
PlaygroundPage.current.NeedsDefiniteExecution=true
Observable.combineLatest(toggleStream, emitter) { shouldEmit, evt in
return (shouldEmit, evt)
}.takeWhile{ (shouldEmit, evt:Int) in
return shouldEmit == true
}.map {(_, evt) in
return evt
}
//: Playground - noun: a place where people can play
import RxSwift
let toggleButton = PublishSubject<Void>()
let toggleStream: Observable<Bool> = toggleButton
.scan(false) { state, _ in !state }
.debug()
.shareReplayLatestWhileConnected()
let emit = toggleStream
.filter { $0 }
.flatMapLatest { _ in
Observable<Int>.interval(2.0, scheduler: MainScheduler.instance)
.takeUntil(toggleStream.filter { !$0 })
}
_ = emit.subscribe( {
print($0)
})
toggleButton.onNext()
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5.0) {
toggleButton.onNext()
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 11.0) {
toggleButton.onNext()
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 17.0) {
toggleButton.onNext()
}
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true