如果你点击一个 UIButton,RxSwift 是如何工作的?

How does RxSwift work if you click a UIButton?

我刚开始学习 RxSwift。我已经添加了一个 UIButton 和一个 observable in 和一个应该在每次数据更改时触发的 suscribe 方法,但我没有让它工作。我错过了什么?

@IBAction func buttonAction(_ sender: Any) {
    publishableSubject.onNext("GURKA")
}

override func viewDidLoad() {
    super.viewDidLoad()

    let bag = DisposeBag()
    _ = publishableSubject.subscribe(onNext: {
        print([=10=])
    }).disposed(by: bag)
}

你的处置包是本地的,所以它会在 viewDidLoad 退出时取消初始化,这将处置你设置的可观察链。对于您所描述的情况,只需将处理包移至 class 级别即可解决问题。

let publishableSubject = PublishSubject<String>()
let bag = DisposeBag()

@IBAction func buttonAction(_ sender: Any) {
    publishableSubject.onNext("GURKA")
}

override func viewDidLoad() {
    super.viewDidLoad()

    publishableSubject
        .subscribe(onNext: {
            print([=10=])
        })
        .disposed(by: bag)
}

您可能还需要考虑导入 RxCocoa 库。它会为您设置操作,因此您可以编写更少的代码:

override func viewDidLoad() {
    super.viewDidLoad()

    myButton.rx.tap
        .map { "GURKA" }
        .subscribe(onNext: {
            print([=11=])
        })
        .disposed(by: bag)
}