iOS/Android Developers Night with HAKATA.swift で SwiftUI について話してきました #hakataswift
はじめに
こんにちは
CX事業本部の田中孝明です。
9/25に Fukuoka Growth Next で iOS/Android Developers Night with HAKATA.swift が開催され、 SwiftUIで変わるiOS開発 というテーマで登壇しましたのでレポートします。
登壇資料
SwiftUI について
- WWDC19 で発表された、 InterfaceBuilder -> Storyboard に次ぐ、UIを構築するためのframework
- ViewControllerを介在させない新しい概念
- レイアウトをコードで表現できるため、Autolayoutなどの複雑な概念を使わないで画面を構築できる
- プレビュー機能でコーディングしながら、作成中の画面の確認ができる(macOS / Catalina以降)
- DarkModeがデフォルトで対応
SwiftUI と Property Wrappers
@State
- UIの状態とステート変数を自動的に同期する仕組み
- ステート変数を変更するとUIが更新され、またUIを変更するとステート変数が更新される
@Binding
- 値を参照する側のViewのプロパティに宣言することで、別のViewの @State などの値の更新通知を受け取れる
ObservableObject
- 値の更新を通知するクラスを ObservableObject プロトコルに適合させると、 @ObservedObject を宣言したプロパティへ更新通知を行うようになる
Environment
- Viewの階層全体にまたがるような設定を共有する仕組み
- @EnvironmentObject
- Environment の中にカスタムな値を設定できる
- 子Viewへデータを渡すのにViewの階層を辿っていく必要がなくなる
- @Environment
- EnvironmentValues に事前に定義されている値を使い、 Environment 全体にまたがる設定の取得、更新ができる
- @EnvironmentObject
@GestureState
- 特定のViewに対する長押しや回転などの既知のジェスチャーパターンを認識する
- パターンが一致した時にSwiftUIはビューの状態を更新したり、アクションを実行したりするためのコールバックを実行する
- 詳しくは Adding Interactivity with Gestures を参照
SwiftUI と Combine framework
ごく一部だけ紹介しました
- Combine framework
- 非同期なデータを処理するためのframeworkでPub / Subな仕組みを提供
現環境との共存
- UIHostingController
- 既存の UIViewController に SwiftUI を組み込むためのController
- UIViewRepresentable
- SwiftUI に既存の UIView部品 を組み込むための仕組み
まとめ
SwiftUIはWWDC19で発表されてからもアップデートがされ続け、既存のプロダクトに組み込むには躊躇するかもしれません。そんな中でも実際のプロダクトに組み込んでみた報告なども挙がっており、しばらくは iOS開発 のトレンドであることは間違い無いと思います!
参考文献
公式ドキュメント
- Combine
- Creating and Combining Views
- EnvironmentValues
- UIHostingController
- UIViewRepresentable
- Adding Interactivity with Gestures