忙しい人向けの What's new in SwiftUI - #WWDC20

画像60

以下の5つに分けて解説していくよ。
画像1

Apps and Widgets

SwiftUI だけを使ってアプリを作れるようになったよ。画像2

プロトコル として App / View を利用しているけど、body の返す型が Scene / View で異なるよ。画像3

Scene の詳細は App Essentials in SwiftUI で語るけど、ここでは WindowGroup を見ていくよ。
画像4

WindowGroup はマルチプラットフォームに対応して動作するよ。iOSではシングル・ウィンドウで表示されて、画像5

WatchOS でも同様だよ、アプリの構造としては一緒だからね。画像6

iPadOS ではマルチウィンドウに自動的に対応されるよ。画像7

macOS でもマルチウィンドウに対応されて、Cmd+N で新規ウィンドウを開けるし、画像8

1つのウィンドウにタブとして集約することも出来るよ。画像9

他のシーンの例として、Settings を利用すると macOS 用の設定画面を追加できるよ。画像10

DocumentGroup を利用すると、ドキュメントベースのアプリも作れるよ。画像11

保存などの標準的なメニューも自動的に追加されるんだ。画像12

もちろん独自のメニューも追加できるよ、ショートカット付きのね。画像13

詳しくは他のセッションも見てね。画像14

Xcode にマルチプラットフォーム用のテンプレートが追加されたよ。
画像15

Launch screen の設定は info.plist でシンプルに行えるようになったよ。画像16

ウィジェットは Widget プロトコルに準拠して作るんだ。画像17

他のセッションも参考にしてね。画像18

AppleWatch 用のコンプリケーションも SwiftUI で作れるようになったんだ、同様に他セッションも参考にしてね。画像19

Lists and Collections

新しくアウトラインがサポートされたんだ。画像20

アウトラインはキーパスで子を指定することで、再帰的な表示も可能だよ。
画像21

遅延読み込みに対応した、グリッドレイアウトがサポートされたんだ。これは端末のサイズに合わせてカラム数が変化するパターンだけど、画像22

もちろん数を固定することも出来る。画像23

今回サポートされた switch を利用して、行ごとに異なるレイアウトを適用することだって出来るんだ。画像24

詳しくは以下のセッションも見てね。画像25

ツールバーは、toolbar モディファイアを利用して作れるんだ。画像26

placement を指定することで、SwiftUI が適切な位置に配置してくれるよ。画像27

.principal を指定すると目立つ位置に、画像28

.bottomBar を指定すれば下部、みたいにね。画像29

ラベルは、タイトルとSF Symbol のアイコンを指定できるよ。これはシンッタックスシュガーで、画像30

これが完全系なんだけど、どちらも任意の View を受け取れるから柔軟なんだ。画像31

ラベルはコンテキストによって表示が適切に変化し、例えばツールバーにおいてはアイコンのみが表示され、画像32

リスト中では、フォントサイズに応じてキレイにリサイズされるんだ。画像33

help モディファイアは、macOS 上でツールチップを表示するけど、他プラットフォームでは VoiceOver に自動的に対応してくれるんだ。画像34

keyboardShortcut モディファイアでショートカットを設定できるよ。画像35

ESCキーで閉じる、Enterキーで決定、みたいな指定もできるんだ。
画像36

最後にいくつかコントロールを紹介するけど、最初は ProgressView だ。画像37

円形のインジケータにも出来るし、画像38

進捗状況なしの表示もできる。画像39

Gauge(ゲージ)は、全体の一部の割合を視覚化するものだ。画像40

表示要素はここまで増やせる。画像41

New effects and styling

macOS Big Sur の通知センターとコントロールセンターは SwiftUI で作られていて、滑らかなアニメーションが備わっている 。画像42

mathedGeometryEffect モディファイアを利用すれば、アルバムの位置を入れ替える時に、SwiftUI が自動的に滑らかなアニメーションを提供する。画像43

ContainerRelativeShape は最も近くにあるコントロールと同じ形状のパスを取るよ。
画像44

padding を調整すると、この強力さが分かるよね。画像45

フォント関連の進化として、カスタムフォントを利用したり、テキスト中に画像を埋め込むことも出来るようになったんだ。画像46

もちろん dynamicType にも対応してる。他のセッションも参考にしてね。画像47

標準のシステムコントロールを使用していても、アクセントカラーを変更することでアプリが際立つよ。画像48

アセットカタログで管理できるよ。画像49

個別に指定することで、部分的に変更することも出来るんだ。画像50

WatchOS だと背景色に反映されるね。画像51

他のコントロール、例えばスイッチにも対応しているよ。画像52

System integrations

Link ビューはブラウザを開いたり、他のアプリを開くリンクを提供するよ。画像53

プログラム的に開きたい場合は、@Environment(\.openURL) を利用できるよ。画像54

ドラッグ&ドロップもAPIとしてサポートされたよ。画像55

これは UniformTypeIdentifiers フレームワークで実装されていて、様々な情報を取得することが出来るんだ。画像56

Sign in with Apple ボタンも用意されたよ。画像57

他のフレームワークも SwiftUI から利用しやすくなってるんだ。画像58

Swift の進化については以下のセッションも見てね。画像59

免責

・本記事は公開情報のみに基づいて作成されています。
・要約(意訳)のみなので、詳細はセッション動画をご確認ください。


役に立った記事などありましたらサポート頂けると嬉しいです。