これは、問題を再現する私のコードの短いバージョンです:
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
let source = button.rx_tap.map { _ in "source" }
let delay = source.map { _ in "delayed" }
.delaySubscription(2.0, MainScheduler.sharedInstance)
[source, delay].toObservable().merge()
.subscribeNext { print($0) }
.addDisposableTo(disposeBag)
}
}
ボタンをタップしてから2秒後に「遅延」信号を発したいのですが、そのような運はありません。実際に何が起こるか: ボタンを初めてタップすると、「ソース」が起動しますが、他には何も起こりません。その後、もう一度タップすると、「ソース」と「遅延」が同時に発火します。スレッドの問題だと思ったので、observeOn(MainScheduler.sharedInstance)
どこにでも追加しようとしましたが、役に立ちませんでした。何か案は?
更新:.debug()
ストリームに追加することで、遅延ストリームが実際に 2 秒後にソースにサブスクライブすることがわかりました。しかし、それでも 2 秒後に通知が送信されない理由は説明できません。