だいたい死んでる

渋谷で働いているWEBプログラマーです。

SwiftUIについて調べたこと

この記事は ウィルゲート Advent Calendar 2019 の17日目の記事です。

最近業務でSwiftを触ることがなくなり少しさみしいのでSwiftUIについて調べたことをまとめていきます。

SwiftUIの登場まで

iOS SDKの登場以降、iOSアプリのViewを開発する場合はAppleが提供しているUIフレームワークのUIKitを使用してきました。このフレームワークを使用することで、簡単にViewを組み立てることができました。 ただUIKitで作られたアプリはViewControllerに処理が集まっていることが多く、FatViewController になることが多くありました。

問題を解消するため、開発者はMVVM,Viper,クリーンアーキテクチャなどの設計を取り入れてアプリを開発してきました。 2019年WWDCで宣言的にViewを組み立てる仕組みとしてのSwiftUIが発表されました。 SwiftUIの登場によりアプリ開発がどう変わるかをまとめていきます。

SwiftUIとUIkitの違い

UIKit SwiftUI
アーキテクチャ イベント駆動 状態駆動
イベント処理 コールバック,デリゲート クロージャーコールバック

SwiftUIとUIKitの大きな違いは、構文が変わったこと以外に、Viewに状態をもたせることができるようになったことです。 アプリ開発では複雑な状態を扱う事が多く、状態どこで管理しどう扱うかに頭を悩ませることが多くありました。 状態を管理する方法として、AppleはCombineをSwiftUIと同時に発表しました。 CombineはViewへ状態をバインドするための仕組みを提供しています。またViewの中で状態を管理することができるようになりました。 SwiftUIとCombineを使用することで状態の管理が簡単になると思います。

WWDCのセッションではユーザーのアクションをViewへ伝えていくためにどうするか説明がされています。 興味がある人は見てみるといいと思います。 f:id:MikaE:20191212123119p:plain

アーキテクチャについて

SwiftUIとCombineを使用することにより画面の状態をViewに持たせることが出来ます。またデータバインドの仕組みを標準でサポートしているため、MVVMアーキテクチャを使用して作成することが簡単になりました。@Publishedや@Stateような属性や@ObservableObjectを使用しViewModelを作ることが出来ます。

まとめ

SwiftUIはまだまだ登場したばかりで資料がすくないため導入は難しいかもしれません。今後も動向を追っていきたいと思います。

明日はokashoiさんで、『PHP + Swoole で論理回路シミュレータを作ってみた(仮)』です。 お楽しみに!

参考資料

developer.apple.com

developer.apple.com

developer.apple.com

developer.apple.com