【Swift】RxSwift勉強してみたPart3
はじめに
前回に引き続き、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
に分けて書いてみます。
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()
}
}
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まだまだわからないことだらけ、、、
次回
Author And Source
この問題について(【Swift】RxSwift勉強してみたPart3), 我々は、より多くの情報をここで見つけました https://qiita.com/REON/items/aa8f9a6c72e01fd56272著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .