如果单击UIButton,RxSwift如何工作?

问题描述 投票:1回答:1

我刚刚开始学习RxSwift。我添加了一个UIButton,其中包含一个可观察到的值和一个suscribe方法,该方法应在每次数据更改时触发,但我无法正常工作。我想念什么?

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

override func viewDidLoad() {
    super.viewDidLoad()

    let bag = DisposeBag()
    _ = publishableSubject.subscribe(onNext: {
        print($0)
    }).disposed(by: bag)
}
swift rx-swift
1个回答
0
投票

您的处理包是本地的,因此在viewDidLoad退出时它将取消初始化,这将处理您设置的可观察链。对于您所描述的内容,只需将处理袋移动到班级即可解决。

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

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

override func viewDidLoad() {
    super.viewDidLoad()

    publishableSubject
        .subscribe(onNext: {
            print($0)
        })
        .disposed(by: bag)
}

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

override func viewDidLoad() {
    super.viewDidLoad()

    myButton.rx.tap
        .map { "GURKA" }
        .subscribe(onNext: {
            print($0)
        })
        .disposed(by: bag)
}
© www.soinside.com 2019 - 2024. All rights reserved.