この記事は トレタ Advent Calendar 2019 の23日目の記事です。 こんにちは。iOS & Androidエンジニアの山口です。 トレタでは、主にトレタnowの開発を行っています。 これまで、UIKit、RxSwift(RxCocoa)を使ったMVVMアーキテクチャで実装することが多かったこともあり、 SwiftUI、Combineを使った場合にはどう書けばよいか考えてみました。 なお、この記事はSwiftUIを使う際に重要なポイントとなる PropertyWrappersやDynamicMemberLookup、それらを利用したObservedObjectやBindingについて の知識がある前提で記述しています。 ViewModel Protocol の定義 早速ですが、コードから説明していきます。 まず、すべてのViewModelが準拠すべきシンプルなProtoco