#はじめに
前回に引き続き、RxSwiftを勉強したので、その学習アウトプットです。
RxSwiftでHello World的なものを書いてみます。
#GitHub
以下のHelloRxSwiftフォルダに今回のプロジェクトはあります。
#実装
流れは以下の通りです。
1.HelloWorldSubject
というSubject
を定義
2.Subject
を購読
3.値が流れてきたらprint
で値を出力されるように定義
4.定義したクラスが破棄されたら購読も自動的に破棄させる
5.N回イベントをながす
6.定義したクロージャがN回実行される
viewDidLoad
でこのように書いてみます。
import UIKit
import RxSwift
class HelloRxViewController: UIViewController {
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
let helloWorldSubject = PublishSubject<String>()
helloWorldSubject.subscribe(onNext: { message in
print("onNext: \(message)")
}, onCompleted: {
print("onCompleted")
}, onDisposed: {
print("onDisposed")
})
.disposed(by: disposeBag)
helloWorldSubject.onNext("HelloWorld!")
helloWorldSubject.onCompleted()
}
}
出力結果
//onNext: HelloWorld!
//onCompleted
//onDisposed
このような書き方はViewController
とViewModel
や遷移元と遷移先のViewController
のデータの受け渡しで使われます。
次はViewController
とViewModel
に分けて書いてみます。
HelloRxViewController
import UIKit
import RxSwift
class HelloRxViewController: UIViewController {
private let disposeBag = DisposeBag()
private let viewModel = HelloRxViewModel()
override func viewDidLoad() {
super.viewDidLoad()
viewModel.helloWorldObservable
.subscribe(onNext: { message in
print("onNext: \(message)")
}, onCompleted: {
print("onCompleted")
}, onDisposed: {
print("onDisposed")
})
.disposed(by: disposeBag)
viewModel.updateItem()
}
}
HelloRxViewModel
class HelloRxViewModel {
var helloWorldObservable: Observable<String> {
return helloWorldSubject.asObservable()
}
private let helloWorldSubject = PublishSubject<String>()
func updateItem() {
helloWorldSubject.onNext("Hello World!")
helloWorldSubject.onCompleted()
}
}
出力結果
//onNext: HelloWorld!
//onCompleted
//onDisposed
#おわりに
RxSwiftまだまだわからないことだらけ、、、
次回