这是我的代码的简短版本,它将重现该问题:
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 秒后触发通知。