はじめに
勉強がてら、RxSwiftでのデータバインディングのサンプルアプリを製作してみました。
限りなくシンプルな実装になっているので、ぱっと見でもコードの流れがわかりやすいかと思います。
アプリの機能は、TextFieldに入力した値が、リアルタイムでLabelに反映される、ただそれだけのアプリです。
コード全文載せておきます。
UIViewController
import UIKit
import RxSwift
import RxCocoa
class ViewModel {
let username = BehaviorRelay<String>(value: "")
}
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var textField: UITextField!
let disposeBag = DisposeBag()
var viewModel: ViewModel!
override func viewDidLoad() {
super.viewDidLoad()
setupViewModel()
}
func setupViewModel() {
viewModel = ViewModel()
// MARK: ViewModelの変化をViewController(UI)に伝える
viewModel.username
.bind(to: label.rx.text)
.disposed(by: disposeBag)
// MARK: ViewModel(UI)の変化をViewModelに伝える
textField.rx.text.orEmpty
.bind(to: viewModel.username)
.disposed(by: disposeBag)
}
}
ちなみに、
orEmpty
では、TextFieldのtextの型をString?からString型へ変換しています。
これでStringの型としてバインディング出来ている訳です。
さいごに
非常に簡素なアプリですが、RxSwiftは覚えることが多すぎて、どうしたらいいのか解らずじまいになりがちなので、こうしてサンプルアプリを量産しながら、一つ一つ確実に理解を深めていければなと思います!!
以上です。