2020年7月23日木曜日

SwiftUIのみでアプリを作れるか?

ただいま、SwiftUIだけを使って新規アプリを作ってみるチャレンジ中。
いままでSwiftUIをApple Watchの一部でしか使ってなかったので、ほぼイチから学ぶ状態ではあるが、iOS14 Day1に向けて頑張り中。

せっかく新しく作るのであれば、Multi Window / Multi Platform でも大丈夫なものを作成したい。が、まだ頭がなれなくて難しい。

SwiftUIの第一印象

現時点でのSwiftUIの感想は、
Viewを作成しなおすことを躊躇なくやることにしたんだな 
と。

いままでUIKitを使っていたときは、Viewをレイアウトして描画する処理はコストが高いので、Viewはできるだけ使いまわし、データを入れ替える という設計思想があった。
対して、SwiftUIは、Viewに対するデータは、1対1にして結合することで管理しやすくなる反面、Viewを作成する回数は増える。

その代わり、SwiftUIのViewのレイアウトの計算は、UIKitに比べてコストがかからないようになっているように感じる。
まだ把握しきれてないが、Viewのサイズは自身のViewが決定し、親Viewで決定できない感じ?StackViewのfillの指定が無いみたいな。
いまはまだ、UIKitのときのように設定できないのが、イライラしてしまうがw

とはいえ、無駄に大きなViewを何回も作成しなおすのは良くないので、データ設計はいままでよりも、しっかりやらないといけない感。

変更される可能性があるデータと、変更されないデータ。
データを保持する場所と、参照する範囲。

そして、ViewはPreviewしやすいものにしたいので、EnvironmentObjectはあまり使わないように...と考えると、考慮することは多い。

デバイスのスペックは高くなったし、macOSだとユーザがViewサイズを変えることができるので、こういう方向性になったのは納得感はある。


プログラム初心者には?

SwiftUIは、プログラム初心者が学ぶにはいい?って思ってたけど、考えが変わった。
データが変更された → Viewを変更する という手順をOSが行うので、コード量は減る。が、見えないところも多くなるので、理解は難しそう。値渡し/参照渡しの理解も必須だろうし。
BlackBoxのところでハマるのはツラい。
だけど、ViewControllerのDelegateを作る必要もなさそうだし、理解が必要なことが単純に増えるわけではない。
classよりもstructに慣れる強制力としてはいいかもしれない。


デザイナーさんとの分担は?

Flask では、UIデザインの修正を @horiuni さんに分担にしていて、いままではStoryboardの修正をお願いしている。SwiftUIではどういう形がよいのか?

Storyboardではできないデザイン設定 例えばAttributedStringとか、Button内のLabelの設定などがあるので、SwiftUIで一箇所にデザインに関することをすべて書けるのは良い。
個々の小さいViewごとにPreviewできるのも良い。
だが、Viewとデータのコードが混在するのは避けられない。

UIKitでは、画面の枠をざっくり作ってからその中のViewを整えていたけど、SwiftUIでは、反対がよさそう。つまり、小さな部品Viewをつくってから画面を作る流れ。
データクラスの枠と、そのプレビュー用データがあれば、小さな部品Viewが作れるし。

Viewとデータクラスを一つのファイルにまとめて閉じた形にすれば、他アプリへコピーしやすくなるかもしれないなぁ。

アプリ完成時に、SwiftUIへの感想がどう変わっているかが楽しみ。


• • •