Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iOS14のTips&Tricks

Sato Takeshi
November 26, 2020

 iOS14のTips&Tricks

Sato Takeshi

November 26, 2020
Tweet

More Decks by Sato Takeshi

Other Decks in Technology

Transcript

  1. iOS14のTips&Tricks
    2020 年 11 月 26 日
    佐藤タケシ
    Swift開発座談会 2020 by Bitrise

    View Slide

  2. Who am I
    ● Name
    ● 佐藤タケシ(さとうたけし)
    ● Company
    ● Merpay, Inc.(2019/01 ~)
    ● Role
    ● Software Engineer (iOS)
    ● Account
    ● Twitter: @hatakenokakashi
    ● Facebook: 佐藤剛士
    ● GitHub: SatoTakeshiX

    View Slide

  3. ● SwiftUIを始める最適な一冊
    ● SwiftUIの基礎を徹底解説
    ○ レイアウトシステム
    ○ 座標空間
    ○ データ管理
    ○ UIコンポーネント
    ● 実践的なアプリサンプル
    ○ GitHub API
    ○ お絵かきアプリ
    ○ 写真フィルターアプリ
    ● iOS 14対応
    ○ LazyVStack、LazyVGrid、
    WidgetKit、@StateObjectなど
    「SwiftUI開発レシピ amazon」で検
    索!

    View Slide

  4. iOS14のTips&Tricks
    ● WidgetKitのTimeline
    ● @StateObjectと@ObservedObjectの違い

    View Slide

  5. WidgetKitのTimeline

    View Slide

  6. iOS 14からWidget登場

    View Slide

  7. TimelineProvider
    ● Widgetを更新させる仕組み
    ● 3つのメソッド
    ○ placeholder
    ○ getSnapshot
    ○ getTimeline

    View Slide

  8. placeholderメソッド
    ● Widgetが最初に起動した際に呼ばれるメソッド
    ● プレースホルダーとして表示
    ○ 暗黙的に.redacted(reason: .placeholder)をviewに追加
    ● データは素早く返却する必要あり

    View Slide

  9. getSnapshotメソッド
    ● タイムラインの最初を表すメソッド
    ● Widget Gallary用のコンテンツを設定できる
    ● 非同期でデータ取得可能
    ● Widget Gallaryに表示されている場合は、データを素早く
    返却するのが望ましい(サンプルデータなど)

    View Slide

  10. context.isPreviewでWidget Gallary

    View Slide

  11. getTimelineメソッド
    ● タイムラインを作成するメソッド
    ● Widgetがいつ更新するかを決定する

    View Slide

  12. Timelineのプロパティ
    ● entries:[EntryType]
    ● policy:TimelineReloadPolicy
    ○ .atEnd
    ○ .never
    ○ .after(_ date: Date)

    View Slide

  13. View Slide

  14. View Slide

  15. @StateObjectと
    @ObservedObject
    の違い

    View Slide

  16. @StateObjectと@ObservedObject
    ● どちらも参照型のデータをSwiftUIで扱う
    PropertyWrapper
    ● データモデルの型はObservableObjectプロトコルの準拠
    が必要
    ● データモデルのライフサイクルが異なる

    View Slide

  17. データモデルのライフサイクル
    @StateObject
    ● SwiftUIのViewが表示してから
    非表示になるまで
    ● View自身のプロパティとして保
    持する場合に使用する
    @ObservedObject
    ● bodyプロパティが更新されるま

    ● 親Viewから子Viewにデータモ
    デルを渡す場合に使用する

    View Slide

  18. View Slide

  19. View自身でデータモデ
    ルを保持している

    View Slide

  20. View Slide

  21. View自身でデータモデ
    ルを保持している

    View Slide

  22. View Slide

  23. ボタンタップすると
    親Viewのプロパティが更
    新する。
    すると親Viewのbodyが更
    新される

    View Slide

  24. 子Viewとして配置

    View Slide

  25. View Slide

  26. @ObservedObjectは親Viewから渡す時に使う

    View Slide

  27. Sample Code
    ● https://gist.github.com/SatoTakeshiX/15446b78386
    25c9c2959c2e50d692703

    View Slide

  28. 参考資料
    ● https://developer.apple.com/documentation/widge
    tkit/keeping-a-widget-up-to-date

    View Slide