Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MVVMについて.pdf

622c25352cca9db43a10c0f3d4f73b75?s=47 keisukeYamagishi
November 28, 2021
160

 MVVMについて.pdf

622c25352cca9db43a10c0f3d4f73b75?s=128

keisukeYamagishi

November 28, 2021
Tweet

Transcript

  1. 僭越ながら、 MVVM🤔 Input Output について考えてみました。 Shichimitoucarashi keisuke yamagishi

  2. 自己紹介 名前: 山岸恵介 フリーランスのiOSエンジニア Github: https://github.com/keisukeYamagishi Twitter: https://twitter.com/jelly_0_o HP: https://shichimitoucarashi.com App:

    https://apps.apple.com/jp/app/create-sevens/id1452292881 アプリを作っているので、よければDLしていただけますと幸いです🎉
  3. 読みやすく、わかりやすく、管理しやすい コンセプトは

  4. まずは ’Input’これは入力される値を渡すわけです が、工学的🧐 学術的🤔、そして抽象的🤩

  5. わかりづらいと感じます🤓

  6. 受信🎉 わかりやすい気がします(主観ですが) なので、 ’Input’は Receive

  7. `receive` で定義したサンプルコード protocol ViewModelReceive: AnyObject { func callApi(_ indexPath: IndexPath)

    }
  8. `Output` に関しても、工学的🧐、学術的 🤔、そして抽象的🎉

  9. やっぱりこちらもわかりづらいと感じます😇

  10. なので😇 例えばですが、 画面遷移を伴うものは、 `route` で定義 UIに変化を反映させる場合は、 `ui` で定義。

  11. routeのサンプルコード protocol ViewModelRoute: AnyObject { func detail(_ result: @escaping (Data?,

    String, HTTPURLResponse?, Error?) -> Void) func transition(_ callBack: @escaping () -> Void) }
  12. uiのサンプルコード protocol ViewModelUI: AnyObject { func progress(_ handler: @escaping ((Float)

    -> Void)) }
  13. ViewController側の実装🦾 viewModel.route.detail { [unowned self] data, str, res, error in

    self.detail(data: data, param: str, response: res, error: error) } viewModel.route.transition {[unowned self] in self.detailViewController(isDL: true) } viewModel.ui.progress { percentage in self.progressView.progress = percentage } viewModel.receive.callApi(indexPath)
  14. まとめ この書き方については、「Nuke」の作者の「Alex Grebenyuk」のtweetをみて自分なりに作成してみまし た。 https://github.com/kean https://twitter.com/a_grebenyuk サンプルが下記になります。興味のある方はみていただけますと幸いです。 https://github.com/Jelly-and-removes/HttpSession/tree/feature/new-architectur e 使う人がわかりやすい事を念頭におく事が大事だと考えるので、このよう

    な考え方は良いと考え、この場をお借りして、発言させていただきました。 皆様のご意見、ご感想をいただけますと非常に幸いでございます。 以上となります。
  15. ご静聴いただき誠にありがとうございました。 🎉