Androidエンジニアの山口です。トレタでは、主にトレタnowの開発を行っています。SwiftUI、Combineを使った場合にはどう書けばよいか考えてみました。知識がある前提で記述しています。コードから説明していきます。すべてのViewModelが準拠すべきシンプルなProtocolを定義しました。意図としては下記2点が挙げられます。値の変更をSwiftUIに通知するためにObservableObjectに準拠SwiftUIからViewModelを使うための工夫SwiftUI側はViewModelインスタンスを@ObservedObjectとして保持します。その2つのobjectWillChangeをマージした結果をViewModelObjectのobjectWillChangeとしています。@propertyWrapperと@dynamicMemberLookupを利用しています。MVVMの実装では実際にViewModelObjectを利用して、サインアップ画面ぽいものを実装してみます。UIの構成要素は下記の通りです。その結果をBindingObject、OutputObjectに反映させています。$をつけることでPublisherを取り出すことができます。}@ObservedObjectとしてViewModelのプロパティを定義します。ボタンタップなどのアクションを受け取るクロージャで、InputObjectのSubjectに対してイベントを送信しています。DynamicMemberLookupによりBindingプロパティを取得しています。おわりにSwiftUIにはバインディングの仕組みが標準的に実装されており、UIKitとRxSwift(RxCocoa)での実装にくらべ、かなりすっきりと書くことができました。SwiftUIではまだ実装が厳しい部分については、一部UIKitで実装するなどの選択肢も取ることが可能かと思います。RxSwiftを触ったことがあればすんなり実装できるかと思います。»トレタ開発者ブログ飲食店向け予約/顧客台帳サービス「トレタ」、超直前予約アプリ「トレタnow」の開発メンバーによるブログです。Blogスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。