いままで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への感想がどう変わっているかが楽しみ。