これからはじめるSwiftUI 〜iOSアプリ開発の新スタイル・新スタンダード〜
by
Tasuku Maeda
×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
スライドは後で⼊⼿することが出来ますので 発表中の内容をメモする必要はありません。 写真撮影をする場合は フラッシュ・シャッター⾳が出ないようにご配慮ください Attention
Slide 2
Slide 2 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 2 資料の場所 資料が⼿元で⾒られる⽅はこちらからどうぞ︕ Twitter @kinkuma_designにも掲載してマス サンプルコード(GitHub) cm-tsmaeda/DevelopersIO_2019_SwiftUI https://github.com/cm-tsmaeda/DevelopersIO_2019_SwiftUI
Slide 3
Slide 3 text
これからはじめるSwiftUI 2019/11/1(Fri) CX事業本部 前⽥ タスク 〜iOSアプリ開発の新スタイル・新スタンダード〜
Slide 4
Slide 4 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 4 ⾃⼰紹介 前⽥ タスク CX事業本部所属(2019.1⽉⼊社) iOSアプリエンジニア ⼊社前)Flash -> Webフロントエンドの フリーランスで11年 Twitter @kinkuma_design 個⼈活動 きんくまデザイン
Slide 5
Slide 5 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 5 ⾃⼰紹介 (宣伝)個⼈制作iOSアプリ フォルメモ フォルダの中にフォルダが 作れるメモ帳 (10万DL) ジッピー電卓 計算式が書けたり、履歴が⼿軽に再利⽤ できる電卓 (16万DL) Habit Keeper ⽇課・習慣記録(12万DL)※現在サポート切れ
Slide 6
Slide 6 text
6 もくじ
Slide 7
Slide 7 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 7 もくじ 1. SwiftUIとは︖ 2. はじめてのView 3. Data Flow 4. UIKitとの相互連携 時間的に厳しいので ふろくとして掲載
Slide 8
Slide 8 text
8 1. SwiftUIとは︖
Slide 9
Slide 9 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 9 SwiftUIとは︖ 1. WWDC 2019で発表 2. 宣⾔的にUIを書ける 3. 再利⽤可能なViewコンポーネント 4. Swiftファイル1枚で済む 5. ライブプレビュー 6. データバインディング 7. UIKitとの相互利⽤OK 8.マルチOS対応
Slide 10
Slide 10 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 10 1. WWDC 2019で発表 WWDC 2019で発表された 全く新しいUIフレームワーク
Slide 11
Slide 11 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 11 注意点 iOS 13以降が必須 OSサポートを2年すると、2年後のiOS 15の頃には 気軽に使えるようになっているのでは︖
Slide 12
Slide 12 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 12 注意点 iOS 13以降が必須 個⼈アプリや、ストアに出さない実験アプリ、 iOS 13以降だけを対応するアプリであれば、 今からでも可能 参考)マネーフォーワード ICカードリーダーのiOSアプリをSwiftUIで開発しました https://moneyforward.com/engineers_blog/2019/09/20/ic-cardreader-swiftui/
Slide 13
Slide 13 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 13 2. 宣⾔的にUIを書ける ⼿続き型(UIKit) UIViewを作って addSubView() 宣⾔型(SwiftUI) HTMLのタグの様に宣⾔
Slide 14
Slide 14 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 14 3. 再利⽤可能なViewコンポーネント イメージとしては、HTMLのタグを⾃前で作って、 それを組み合わせて画⾯を作る 各Viewは、そのViewで使うデータも含めて定義できる Webでいうところの、 React/Vue/Angular世代のフレームワークに近い HTMLタグの様にViewを置いていけるので、 再利⽤が⾮常に楽
Slide 15
Slide 15 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 15 4. Swiftファイル1枚で済む UIKitでは、 UIStoryboard(.storyboard) とUIViewController(.swift) の2ファイルがセット SwiftUIは 1ファイルでOK XX.storyboard XXViewController.swift XXView.swift 1 2 1
Slide 16
Slide 16 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 16 5. ライブプレビュー コードを変更す るとプレビュー が変更される GUIの設定を変 えるとコードが 変更される
Slide 17
Slide 17 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 17 5. ライブプレビュー 1画⾯ごとではなく、 各View単位でプレビューが確認できる 各Viewに必要なデータも引数として与えて プレビューできる
Slide 18
Slide 18 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 18 5. ライブプレビュー macOS Catalina(10.15) 以降であれば、 ライブプレビューが可能 Mojave(10.14)以下では ライブプレビューはできないが、開発は可能
Slide 19
Slide 19 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 19 6. データバインディング Two-wayデータバインディングができる データ (Model) UI (View) 変更 更新 更新 変更
Slide 20
Slide 20 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 20 7. UIKitとの相互利⽤OK UIKitの中に SwiftUIを設置可能 SwiftUIの中に UIKitを設置可能 UIKit SwiftUI SwiftUI UIKit
Slide 21
Slide 21 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 21 UIKitとの相互連携 UIKitとは︖ 2011年 Xcode 4.2、iOS5で登場。 現在出ているツール系アプリでよく利⽤される UIフレームワーク。 UIStoryboardとViewControllerを使って UIを作成。
Slide 22
Slide 22 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 22 UIKitとの相互連携 UIKitとは︖ Storyboard上で制約(Constraints)をつけて ⾃動でレイアウトを変更させる(Auto Layout) 各コンポーネントの頭⽂字にUIがつく UIButton, UIView, UITableViewなど
Slide 23
Slide 23 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 23 UIKitとの相互連携 UIKitとは︖ 歴史あるフレームワークなので、 SwiftUIにそもそもないコンポーネントや、 SwiftUIでは望んだ挙動をしないコンポーネント の代わりがある
Slide 24
Slide 24 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 24 7. UIKitとの相互利⽤OK UIKitから好きなコンポーネントを持ってきて 使⽤することができる︕
Slide 25
Slide 25 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 25 8. マルチOS対応 SwiftUI は iOS, macOS, tvOS, watchOSでも使える
Slide 26
Slide 26 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 26 8. マルチOS対応 ただし、同じコードが全てのデバイスで "そのまま" 使えるわけではない︕ 画⾯サイズが違う︕︕ それぞれのOS⽤に書く必要がある
Slide 27
Slide 27 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 27 8. マルチOS対応 Learn once, apply anywhere 1回勉強すれば、 知識が他のOSでも使える
Slide 28
Slide 28 text
28 Swift⽤語
Slide 29
Slide 29 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 29 StructureとClass Structure: 値型。代⼊すると値がコピーされる struct Foo { var width = 0 func greet() {} } Class: 参照型。代⼊すると参照がセットされる class Foo { var width = 0 func greet() {} }
Slide 30
Slide 30 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 30 Protocol Protocol: 他⾔語のいわゆるinterface。 実装すべきプロパティやメソッドを定義する。 デフォルトの動きも設定できるので、protocolを 適⽤するだけで、任意の動作をさせることも可能 protocol Bar { // プロパティやメソッドを定義する } // classに適⽤ class Foo: Bar { } // structに適⽤ struct Baz: Bar { }
Slide 31
Slide 31 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 31 Protocol Structureは継承できないが、Classは継承可能 protocol Bar { } class Foo { } // Fooを継承しつつ、Barプロトコルを適⽤ class Baz: Foo, Bar { }
Slide 32
Slide 32 text
32 2. はじめてのView
Slide 33
Slide 33 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 33 はじめてのViewを作ってみよう
Slide 34
Slide 34 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 34 はじめてのViewを作ってみよう Storyboardではなく
Slide 35
Slide 35 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 35 はじめてのViewを作ってみよう
Slide 36
Slide 36 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 36 はじめてのViewを作ってみよう コード プレビュー プロパティ
Slide 37
Slide 37 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 37 はじめてのViewを作ってみよう プレビュー⽤ コード (省略可能) 実際のViewの コード
Slide 38
Slide 38 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 38 はじめてのViewを作ってみよう Viewの中⾝
Slide 39
Slide 39 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 39 はじめてのViewを作ってみよう Modifier: (CSSみたいに装飾したり、ライフサイクルイベン トや、ジェスチャーイベントを設定する) Text: SwiftUIの 標準View 他にImage, Button など⾊々ある
Slide 40
Slide 40 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 40 基本的なViewを作ってみよう
Slide 41
Slide 41 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 41 基本的なViewを作ってみよう
Slide 42
Slide 42 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 42 基本的なViewを作ってみよう VStack HStack
Slide 43
Slide 43 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 43 基本的なViewを作ってみよう Text Text Image Button
Slide 44
Slide 44 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 44 基本的なViewを作ってみよう Modifierで プロパティを調整
Slide 45
Slide 45 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 45 基本的なViewを作ってみよう ライフサイクルイベントのModifier 画⾯表⽰時に呼ばれる その他にonTapGestureなどジェスチャー系もある
Slide 46
Slide 46 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 46 基本的なViewを作ってみよう ImageのsystemName
Slide 47
Slide 47 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 47 基本的なViewを作ってみよう systemNameは どこからわかる︖
Slide 48
Slide 48 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 48 基本的なViewを作ってみよう SF Symbols 1,500以上のアイコンセット iOS 13以降で使⽤可能 アプリで検索できる
Slide 49
Slide 49 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 49 基本的なViewを作ってみよう
Slide 50
Slide 50 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 50 基本的なViewを作ってみよう folder
Slide 51
Slide 51 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 51 基本的なViewを作ってみよう systemNameは どこからわかる︖ -> SF Symbolsで検索可能
Slide 52
Slide 52 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 52 SceneDelegate
Slide 53
Slide 53 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 53 SceneDelegate
Slide 54
Slide 54 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 54 SceneDelegate - iOS 13以降に使⽤可能 - 1つのアプリを1画⾯に同時に複数⽴ち上げることが できる仕組み - iPadOSでは、1つのアプリを同時に ⽴ち上げることができる。 この1つ1つのインスタンスが SceneDelegateで管理される。 - アプリ全体はAppDelegateで管理する
Slide 55
Slide 55 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 55 SceneDelegate 画⾯のルートViewを変更する Viewに引数を与えるときも修正する
Slide 56
Slide 56 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 56 ListとNavigationView
Slide 57
Slide 57 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 57 ListとNavigationView デモ データの出典) 最も好きなケーキの種類はなに? 1位は誰もが納得、王道の●●に! https://news.mynavi.jp/article/20180223-586948/
Slide 58
Slide 58 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 58 ListとNavigationView
Slide 59
Slide 59 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 59 ListとNavigationView - NavigationViewは画⾯遷移ができるナビゲーション (UIKitだとUINavigationView) - Listでリストメニュー (UIKitだとUITableView)
Slide 60
Slide 60 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 60 ListとNavigationView cakes: [Cake]
Slide 61
Slide 61 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 61 ListとNavigationView Listの各⾏のModelは Identifiableプロトコルを適⽤している必要がある (Hashableなidというプロパティを実装すればOK)
Slide 62
Slide 62 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 62 ListとNavigationView CakeRow (リストの各⾏を 表すカスタムView) ※右はbodyの ⼀部のみを表⽰
Slide 63
Slide 63 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 63 ListとNavigationView
Slide 64
Slide 64 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 64 ListとNavigationView NavigationViewの中でNavigationLinkを設定 すると画⾯遷移を⾏える。 引数のdestinationで遷移先を指定
Slide 65
Slide 65 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 65 はじめてのView まとめ
Slide 66
Slide 66 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 66 はじめてのView まとめ 基本的なView VStack, HStack, Text, Image, Button SF Symbols アイコンセット。iOS 13以降で使⽤可能 List ⾏のリスト。ForEachで各⾏をループ NavigationView NavigationLinkで画⾯遷移
Slide 67
Slide 67 text
67 3. Data Flow
Slide 68
Slide 68 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 68 Data Flow ViewとDataをひもづけて データバインディングできる データ (Model) UI (View) 変更 更新 更新 変更
Slide 69
Slide 69 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 69 Data Flow @State @Binding @ObservedObject @EnvironmentObject 上の4つの@はProperty Wrapperという 仕組み
Slide 70
Slide 70 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 70 Property Wrapper 簡単に⾔えばgetterとsetterをより複雑に定義で きるもの。 コンパイル時にSwiftコンパイラが⾃動で うまいこと変換してくれる さきほどの4つの実装はわからなくても、 どういう働きなのかを知っていればよい
Slide 71
Slide 71 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 71 @State
Slide 72
Slide 72 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 72 @State デモ
Slide 73
Slide 73 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 73 @State @State 宣⾔したプロパティをViewで参照表⽰する。 そのプロパティを変更すると、 UIが更新される = データバインディング
Slide 74
Slide 74 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 74 @State
Slide 75
Slide 75 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 75 @State @State そのView内で完結するプロパティに使う View内で閉じているので privateをつけるのが推奨されている
Slide 76
Slide 76 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 76 @Binding
Slide 77
Slide 77 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 77 @Binding デモ 親View ⼦View
Slide 78
Slide 78 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 78 @Binding @Binding 親Viewのプロパティを ⼦Viewでデータバインディングする仕組み
Slide 79
Slide 79 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 79 @Binding 親View ⼦View
Slide 80
Slide 80 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 80 @Binding 親View ⼦View
Slide 81
Slide 81 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 81 @Binding 親View ⼦View BindingChildView(tapCount: $tapCount) @Binding var tapCount: Int
Slide 82
Slide 82 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 82 @Binding 親Viewから⼦Viewに $をつけて@Stateプロパティを渡すと、 ⼦Viewでデータバインディングが可能 BindingChildView(tapCount: $tapCount)
Slide 83
Slide 83 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 83 @ObservedObject
Slide 84
Slide 84 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 84 @ObservedObject デモ
Slide 85
Slide 85 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 85 @ObservedObject @ObservedObject Viewの外のデータオブジェクト (いわゆるModel)とデータバインディングする SwiftUI データオブ ジェクト
Slide 86
Slide 86 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 86 @ObservedObject データオブジェクトを作る - StructureではなくClass - ObservableObjectプロトコルを適⽤ データバインディングしたいプロパティには @Publishedをつける
Slide 87
Slide 87 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 87 @ObservedObject データオブジェクトを参照する @ObservedObjectをつける
Slide 88
Slide 88 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 88 @ObservedObject struct SwiftUI class ObservableObject @ObservedObject var foo: Bar @Published var name: String バインディングしたい オブジェクト foo.name といった感じに使え る
Slide 89
Slide 89 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 89 @ObservedObject
Slide 90
Slide 90 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 90 @ObservedObject データオブジェクトを参照 データオブジェクトを作成
Slide 91
Slide 91 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 91 @Stateと@ObservedObjectの違い @StateがView内で閉じるのに対して、 @ObservedObjectはView外の ObservableObjectとバインディングする 私⾒では実際のアプリではObservableObjectを ViewModelとして定義した⽅が良さそう
Slide 92
Slide 92 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 92 @ObservedObject MVVM View ViewModel データ バインディング Model Repository Service ※Modelの構成はプロジェクト ごとに違います APIなど Modelの ⼊り⼝。 まとめ役 SwiftUI Observab leObject
Slide 93
Slide 93 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 93 @EnvironmentObject
Slide 94
Slide 94 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 94 @ObservedObject デモ
Slide 95
Slide 95 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 95 @EnvironmentObject @EnvironmentObject ObservedObjectと似ているが、 ObservedObjectはViewと1対1の関係だったの に対して、プロパティの参照をバケツリレー のように引数として渡さずに 複数のViewから参照できる
Slide 96
Slide 96 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 96 @EnvironmentObject View View View View ⼦ ⼦ ⼦
Slide 97
Slide 97 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 97 @EnvironmentObject View View View View ⼦ ⼦ EnvironmentObject ⼦
Slide 98
Slide 98 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 98 @EnvironmentObject View View View View ⼦ ⼦ ⼦ どこからでも 参照可能 EnvironmentObject
Slide 99
Slide 99 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 99 @EnvironmentObject @EnvironmentObject データオブジェクトは@ObservedObjectの ときと同じくObservableObjectを適⽤ 参照時に@EnvironmentObjectをつける
Slide 100
Slide 100 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 100 @EnvironmentObject
Slide 101
Slide 101 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ データを参照する⼀番上の親のModifierに environmentObjectとして渡す 101 @EnvironmentObject
Slide 102
Slide 102 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 102 @EnvironmentObject Singletonとして働く形になるため 使い所をよく検討する (グローバル変数はなるべく少なくしたい)
Slide 103
Slide 103 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 103 DataFlowまとめ @State @Binding @ObservedObject @EnvironmentObject ⼩ ⼩ ⼩ ⼤ 影響範囲 名前
Slide 104
Slide 104 text
104 4. UIKitとの相互連携
Slide 105
Slide 105 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 105 UIKitとの相互連携 UIKit SwiftUI SwiftUI UIKit UIKitの中に SwiftUIを設置可能 SwiftUIの中に UIKitを設置可能
Slide 106
Slide 106 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 106 UIKit SwiftUI UIKitの中に SwiftUIを設置
Slide 107
Slide 107 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 107 UIKitの中にSwiftUIを設置 UIHostingControllerを使う
Slide 108
Slide 108 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 108 UIKitの中にSwiftUIを設置 全体がUIViewとなっていて、 その⼀部分をSwiftUIとして 配置することも可能
Slide 109
Slide 109 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 109 SwiftUI UIKit SwiftUIの中に UIKitを設置
Slide 110
Slide 110 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 110 デモ
Slide 111
Slide 111 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 111 UITextField SwiftUI
Slide 112
Slide 112 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 112 SwiftUIの中にUIKitを設置 とりこみたいUIKitが UIView -> UIViewRepresentableを適⽤ UIViewController -> UIViewControllerRepresentableを適⽤
Slide 113
Slide 113 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 113 SwiftUIの中にUIKitを設置 makeUIView() -> UIKitコンポーネントを作成+初期化 updateUIView()を実装する -> Viewが更新されるときに呼ばれる
Slide 114
Slide 114 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 114 SwiftUIの中にUIKitを設置
Slide 115
Slide 115 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 115 SwiftUIの中にUIKitを設置 UIKitのdelegateを利⽤したい︕ -> View内classでCoordinatorを作る
Slide 116
Slide 116 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 116 SwiftUIの中にUIKitを設置 ※delegateとはUIKitでよく使われる Delegateパターン。 Viewコンポーネントからの通知を ViewControllerで受けるのが通常フロー UIViewController UIView delegate selfでセット delegate?.sample() func sample() {} 親のメソッドを呼べる
Slide 117
Slide 117 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 117 SwiftUIの中にUIKitを設置
Slide 118
Slide 118 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 118 SwiftUIの中にUIKitを設置 CoordintaorをmakeCoordinator()から呼び出す makeUIView()で初期化するときに delegateをセットする 引数のcontext内にcoordinatorが⼊っている
Slide 119
Slide 119 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 119 SwiftUIの中にUIKitを設置
Slide 120
Slide 120 text
120 ありがとうございました︕
Slide 121
Slide 121 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 121 参考資料 SwiftUI Tutorials ̶ Tutorials | Apple Developer Documentation https://developer.apple.com/tutorials/swiftui/tutorials SwiftUI by Example https://www.hackingwithswift.com/quick-start/swiftui Using Combine https://heckj.github.io/swiftui-notes/
Slide 122
Slide 122 text
DNEFWJP DNEFWJP* ʢ࠷ޙ͕ΞΠʣ 122 質疑応答 お気軽にご質問ください︕