Swift開発座談会 2020 で使用した資料 https://www.bitrise.io/webinar/swift-japan-2020?utm_source=twitter&utm_medium=web&utm_campaign=jpswift
iOS14のTips&Tricks2020 年 11 月 26 日佐藤タケシSwift開発座談会 2020 by Bitrise
View Slide
Who am I● Name● 佐藤タケシ(さとうたけし)● Company● Merpay, Inc.(2019/01 ~)● Role● Software Engineer (iOS)● Account● Twitter: @hatakenokakashi● Facebook: 佐藤剛士● GitHub: SatoTakeshiX
● SwiftUIを始める最適な一冊● SwiftUIの基礎を徹底解説○ レイアウトシステム○ 座標空間○ データ管理○ UIコンポーネント● 実践的なアプリサンプル○ GitHub API○ お絵かきアプリ○ 写真フィルターアプリ● iOS 14対応○ LazyVStack、LazyVGrid、WidgetKit、@StateObjectなど「SwiftUI開発レシピ amazon」で検索!
iOS14のTips&Tricks● WidgetKitのTimeline● @StateObjectと@ObservedObjectの違い
WidgetKitのTimeline
iOS 14からWidget登場
TimelineProvider● Widgetを更新させる仕組み● 3つのメソッド○ placeholder○ getSnapshot○ getTimeline
placeholderメソッド● Widgetが最初に起動した際に呼ばれるメソッド● プレースホルダーとして表示○ 暗黙的に.redacted(reason: .placeholder)をviewに追加● データは素早く返却する必要あり
getSnapshotメソッド● タイムラインの最初を表すメソッド● Widget Gallary用のコンテンツを設定できる● 非同期でデータ取得可能● Widget Gallaryに表示されている場合は、データを素早く返却するのが望ましい(サンプルデータなど)
context.isPreviewでWidget Gallary
getTimelineメソッド● タイムラインを作成するメソッド● Widgetがいつ更新するかを決定する
Timelineのプロパティ● entries:[EntryType]● policy:TimelineReloadPolicy○ .atEnd○ .never○ .after(_ date: Date)
@StateObjectと@ObservedObjectの違い
@StateObjectと@ObservedObject● どちらも参照型のデータをSwiftUIで扱うPropertyWrapper● データモデルの型はObservableObjectプロトコルの準拠が必要● データモデルのライフサイクルが異なる
データモデルのライフサイクル@StateObject● SwiftUIのViewが表示してから非表示になるまで● View自身のプロパティとして保持する場合に使用する@ObservedObject● bodyプロパティが更新されるまで● 親Viewから子Viewにデータモデルを渡す場合に使用する
View自身でデータモデルを保持している
ボタンタップすると親Viewのプロパティが更新する。すると親Viewのbodyが更新される
子Viewとして配置
@ObservedObjectは親Viewから渡す時に使う
Sample Code● https://gist.github.com/SatoTakeshiX/15446b7838625c9c2959c2e50d692703
参考資料● https://developer.apple.com/documentation/widgetkit/keeping-a-widget-up-to-date