Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

WidgetKitのTimeline

Slide 6

Slide 6 text

iOS 14からWidget登場

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

context.isPreviewでWidget Gallary

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

@StateObjectと @ObservedObject の違い

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

子Viewとして配置

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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