前からプロジェクトに便利そうだなーって思ってとりあえずCarthageで入れたものの、存在を忘れてて整理してたらこれ便利じゃんってなったので忘れぬうちに記事にします。
毎回DisposeBagを作る…のだるい!
RxSwiftで書いているとほぼ毎回でてくるこのDisposeBag
。だいたい、
import UIKit
import RxSwift
class HogeViewController: UIViewController {
let disposeBag = DisposeBag() // ←毎回定義して...
@IBOutlet private weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
button.rx_tap
.subscribeNext { _ in
print("tap!")
}
.addDisposableTo(disposeBag) // ←突っ込む
}
}
こんな感じでsubscribe
した後なんかは必要になります。これが1箇所だろうが、10箇所だろうがDisposeBag
を作って登録する必要がでてきます。
これが非常に面倒なんですよね。。
そこで登場するのが、 NSObject-Rx です。
どういうものなのか
NSObjectにextensionでDisposeBag
を持たせて、そのオブジェクトが解放されるときに合わせて自動的にDisposeBag
を解放させる、といったものです。
これにより、毎回ViewController毎にDisposeBag
を作る必要がなくなり、
import UIKit
import RxSwift
import NSObject_Rx
class HogeViewController: UIViewController {
@IBOutlet private weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
button.rx_tap
.subscribeNext { _ in
print("tap!")
}
.addDisposableTo(rx_disposeBag)
}
}
と、 rx_disposeBag を指定してあげるだけでよくなります。
NSObjectを継承したクラスに対してのみ有効になりますが、少しはDisposeBag
を宣言して、というのから解放されそうです。
今日は出来る限りこちらに換装できるものは換装させちゃいました。スッキリ。