techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

Swagger Codegen で自動生成したクライアントSDKを使う(RxSwift 編)

Swagger Codegen で自動生成したクライアントSDKを使う(RxSwift 編)

前回 Swagger Codegen にて自動生成したクライアントを使って、今後は RxSwift を用いたデータバインディングを試してみる。

実装

ファイル生成はできているし、必要なパッケージのインストールもできているので実装から入る。

最低限ワンパスの動作を確認する。

UserViewModel

import Foundation
import RxSwift

final class UserViewModel {
    let users: Variable<[User]> = Variable([User]())
    private var disposeBag = DisposeBag()

    func fetchUsers() {

        disposeBag = DisposeBag()
        UsersAPI.getApiV1Users()
        .subscribe(onNext: { [unowned self] users in
            self.users.value += users
        })
        .addDisposableTo(disposeBag)
    }
}

ViewController.swift

import UIKit
import RxSwift
import RxCocoa

class ViewController: UIViewController {
    fileprivate let viewModel = UserViewModel()
    private let disposeBag = DisposeBag()
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        configureObserver()
        viewModel.fetchUsers()
    }

    private func configureObserver() {
        SampleAppClientAPI.customHeaders["Authorization"]
            = "Bearer 9fa9995a17c5849083890b3ee0ef5fbd3fe1b93036b16eefe1149ac34387cc0d"

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")

        viewModel.users.asDriver().drive(
            tableView.rx.items(cellIdentifier: "Cell"),
            curriedArgument: { _, user, cell in
                cell.textLabel?.text = user.name
                cell.detailTextLabel?.text = user.email
        })
            .addDisposableTo(disposeBag)
    }

}

いけるいける、いい感じである。

今回実装した内容は以下に。
kfurue/rails-tutorial-ios at mvvm

その他

あとは Android 側でも自動生成したクライアント SDK を動作させてみようと思う。