SlideShare a Scribd company logo
1 of 19
Download to read offline
Ryoya Ito(@ry-itto) 2020/07/09
Data Essentials in SwiftUI集まれSwift好き!Swift愛好会スピンオフ WWDC20セッション要約会 @オンライン
1
自己紹介
伊藤凌也(@ry-itto)
会津大学学部4年生
カピバラが好き
セッションの内容
• SwiftUI でのデータフロー
• アプリのデータモデル設計
• 実際にアプリに取り入れる際のテクニック
セッションの内容
• SwiftUI でのデータフロー
• アプリのデータモデル設計
• 実際にアプリに取り入れる際のテクニック
SwiftUI でのデータフロー
ビューを作る時に考えたい3つの質問
• 作成するビューで必要なデータは何か?
• 作成するビューではデータをどのように操作するか?
• データはどこから来る(渡される)のか?
SwiftUI でのデータフロー
ビューを作る時に考えたい3つの質問
• 作成するビューで必要なデータは何か?
book という Book 型の値
progress という Double 型の値
それぞれがあればビューを表示できそう。
• 作成するビューではデータをどのように操作する
か?
特になさそう
• データはどこから来る(渡される)のか?
このビューを使うビューで渡されることになりそう。
struct BookCard : View {
let book: Book
let progress: Double
var body: some View {
HStack {
Cover(book.coverName)
VStack(alignment: .leading) {
TitleText(book.title)
AuthorText(book.author)
}
Spacer()
RingProgressView(value: progress)
}
}
}
SwiftUI でのデータフロー
ビューを作る時に考えたい3つの質問
• 作成するビューで必要なデータは何か?
book という Book 型の値
progress という Double 型の値
それぞれがあればビューを表示できそう。
• 作成するビューではデータをどのように操作す
るか?
特になさそう
• データはどこから来る(渡される)のか?
このビューを使うビューで渡されることになりそう。
struct BookCard : View {
let book: Book
let progress: Double
var body: some View {
HStack {
Cover(book.coverName)
VStack(alignment: .leading) {
TitleText(book.title)
AuthorText(book.author)
}
Spacer()
RingProgressView(value: progress)
}
}
}
Source of Truth という言葉でセッション内では扱われる
SwiftUI でのデータフロー
ビューでのデータ保持、それぞれどんな時に使う?
プロパティ => ビューによって変更されないデータ
@State => ビューによって保持される一時的なデータを扱う
@Binding => 他のビューによって保持されているデータを変更したい場合
セッションの内容
• SwiftUI でのデータフロー
• アプリのデータモデル設計
• 実際にアプリに取り入れる際のテクニック
アプリのデータモデル設計
データモデル定義
• ObservableObject を使う
• @Published を使う
• 2つ目の質問
(作成するビューではデータをどのように操作す
るか?)
に答えるのは容易
class CurrentlyReading: ObservableObject {
let book: Book
@Published var progress = ReadingProgress()
@Published var isFinished = false
var currentProgress: Double {
isFinished ? 1.0 : progress.progress
}
}
アプリのデータモデル設計
ビューで作ったモデルを使う
• 他の2つの質問については?
• 作成するビューで必要なデータは何か?
• 作成するビューではデータをどのように操作するか?
• データはどこから来る(渡される)のか?
アプリのデータモデル設計
ビューで作ったモデルを使う
• 扱うための PropertyWrapper が3つ
• @ObservedObject
• @EnvironmentObject
• @StateObject (New!)
アプリのデータモデル設計
ビューで作ったモデルを使う
@ObservedObject
データの依存関係を作る
@EnvironmentObject
ビュー階層間の ObservableObject の扱いを便利にする
@StateObject (New!)
ObservableObject をビューのライフサイクルに結びつける
セッションの内容
• SwiftUI でのデータフロー
• アプリのデータモデル設計
• 実際にアプリに取り入れる際のテクニック
実際にアプリに取り入れる際のテクニック
問題
• 子のビューでモデルをプロパティで
持っていて、そこで初期化している
場合
• ReadingListViewer が際レンダリングさ
れるたびにモデルのインスタンスが生成
されてしまう
struct ReadingListViewer: View {
var body: some View {
NavigationView {
ReadingList()
Placeholder()
}
}
}
struct ReadingList: View {
@ObservedObject var store = ReadingListStore()
var body: some View {
// ...
}
}
実際にアプリに取り入れる際のテクニック
解決策
• @StateObject を代わりに使うこと
で解決ができる(らしい)
• @StateObject を使用すると SwiftUI が
適切なタイミングでインスタンス化をし
てくれるとのこと
struct ReadingListViewer: View {
var body: some View {
NavigationView {
ReadingList()
Placeholder()
}
}
}
struct ReadingList: View {
@StateObject var store = ReadingListStore()
var body: some View {
// ...
}
}
実際にアプリに取り入れる際のテクニック
誰がデータを持つのか
• 共通の祖先に持つ
• @StateObject を使ってそのビュー自身が持つ
• アプリ内のグローバルなデータとして持つ
• App を継承したビューに @State などを利用して宣言してあげる
実際にアプリに取り入れる際のテクニック
データの永続化
• SceneStorage
• SwiftUI が管理しているビューでしか使えない
• 項目の選択状態などを保存
• AppStorage
• UserDefault を使用したグローバルストレージ
• 設定などの小さなデータを保存
おまけ
新しく追加されたイベントソース
• onChange
• onOpenURL
• onContinueUserActivity

More Related Content

Similar to Love swift 20200709

Movable Type Data API Swiftアプリ作成事例
Movable Type Data API Swiftアプリ作成事例Movable Type Data API Swiftアプリ作成事例
Movable Type Data API Swiftアプリ作成事例FromF
 
20150905 stream analytics
20150905 stream analytics20150905 stream analytics
20150905 stream analytics一希 大田
 
Webサービスのコンテンツパターン 或いはデータの活⽤
Webサービスのコンテンツパターン 或いはデータの活⽤Webサービスのコンテンツパターン 或いはデータの活⽤
Webサービスのコンテンツパターン 或いはデータの活⽤Yusuke Wada
 
データバインディング徹底攻略
データバインディング徹底攻略データバインディング徹底攻略
データバインディング徹底攻略Hiroyuki Mori
 
Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜
Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜
Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜CData Software Japan
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方Fumiya Sakai
 
Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編
Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編
Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編Kazumi IWANAGA
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会codeal
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Tomoki Hasegawa
 
Microsoft Azure で スマホからIoTまで
Microsoft AzureでスマホからIoTまでMicrosoft AzureでスマホからIoTまで
Microsoft Azure で スマホからIoTまで Masaki Yamamoto
 
構造化データをツールで簡単に分析
構造化データをツールで簡単に分析構造化データをツールで簡単に分析
構造化データをツールで簡単に分析Yoshitaka Seo
 
Web AppsとApplication Insightsで始めるPaaSの一歩
Web AppsとApplication Insightsで始めるPaaSの一歩Web AppsとApplication Insightsで始めるPaaSの一歩
Web AppsとApplication Insightsで始めるPaaSの一歩Masateru Suzuki
 
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤Recruit Lifestyle Co., Ltd.
 
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤Yu Yamada
 
Swiftで機械学習(Play Machinelearning with Swift easily)
Swiftで機械学習(Play Machinelearning with Swift easily)Swiftで機械学習(Play Machinelearning with Swift easily)
Swiftで機械学習(Play Machinelearning with Swift easily)Yusuke Yoshie
 
IoTデータ活用のフィードバックループ
IoTデータ活用のフィードバックループIoTデータ活用のフィードバックループ
IoTデータ活用のフィードバックループKoichi Sasaki
 
LIFFとの連携でさらに強力に。こんなに使えるLINEログイン
LIFFとの連携でさらに強力に。こんなに使えるLINEログインLIFFとの連携でさらに強力に。こんなに使えるLINEログイン
LIFFとの連携でさらに強力に。こんなに使えるLINEログインNaohiro Fujie
 
Data API + AWS = (CMS どうでしょう 札幌編)
Data API + AWS =  (CMS どうでしょう 札幌編)Data API + AWS =  (CMS どうでしょう 札幌編)
Data API + AWS = (CMS どうでしょう 札幌編)Yuji Takayama
 
AITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえりAITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえりdsuke Takaoka
 

Similar to Love swift 20200709 (20)

Movable Type Data API Swiftアプリ作成事例
Movable Type Data API Swiftアプリ作成事例Movable Type Data API Swiftアプリ作成事例
Movable Type Data API Swiftアプリ作成事例
 
20150905 stream analytics
20150905 stream analytics20150905 stream analytics
20150905 stream analytics
 
20170705 apiをつくろう
20170705 apiをつくろう20170705 apiをつくろう
20170705 apiをつくろう
 
Webサービスのコンテンツパターン 或いはデータの活⽤
Webサービスのコンテンツパターン 或いはデータの活⽤Webサービスのコンテンツパターン 或いはデータの活⽤
Webサービスのコンテンツパターン 或いはデータの活⽤
 
データバインディング徹底攻略
データバインディング徹底攻略データバインディング徹底攻略
データバインディング徹底攻略
 
Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜
Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜
Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜
 
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
 
Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編
Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編
Azure Serverless or Power Platform 〜 あなたならどっち?! - Azure Serverless 編
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
Microsoft Azure で スマホからIoTまで
Microsoft AzureでスマホからIoTまでMicrosoft AzureでスマホからIoTまで
Microsoft Azure で スマホからIoTまで
 
構造化データをツールで簡単に分析
構造化データをツールで簡単に分析構造化データをツールで簡単に分析
構造化データをツールで簡単に分析
 
Web AppsとApplication Insightsで始めるPaaSの一歩
Web AppsとApplication Insightsで始めるPaaSの一歩Web AppsとApplication Insightsで始めるPaaSの一歩
Web AppsとApplication Insightsで始めるPaaSの一歩
 
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
 
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
 
Swiftで機械学習(Play Machinelearning with Swift easily)
Swiftで機械学習(Play Machinelearning with Swift easily)Swiftで機械学習(Play Machinelearning with Swift easily)
Swiftで機械学習(Play Machinelearning with Swift easily)
 
IoTデータ活用のフィードバックループ
IoTデータ活用のフィードバックループIoTデータ活用のフィードバックループ
IoTデータ活用のフィードバックループ
 
LIFFとの連携でさらに強力に。こんなに使えるLINEログイン
LIFFとの連携でさらに強力に。こんなに使えるLINEログインLIFFとの連携でさらに強力に。こんなに使えるLINEログイン
LIFFとの連携でさらに強力に。こんなに使えるLINEログイン
 
Data API + AWS = (CMS どうでしょう 札幌編)
Data API + AWS =  (CMS どうでしょう 札幌編)Data API + AWS =  (CMS どうでしょう 札幌編)
Data API + AWS = (CMS どうでしょう 札幌編)
 
AITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえりAITCオープンラボ IoTx総まとめ これまでのふりかえり
AITCオープンラボ IoTx総まとめ これまでのふりかえり
 

Love swift 20200709