1

これは、問題を再現する私のコードの短いバージョンです:

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 秒後に通知が送信されない理由は説明できません。

4

1 に答える 1