【WWDC20】SwiftUIの新規追加要素まとめ

[公開差分](https://developer.apple.com/documentation/swiftui?changes=latest_major)から新規追加になってるものだけ引っ張って来て、概要だけをDeepLにかけて記載整理している記事です。

「へ〜そんなもの追加されてるんだ〜」と3分ぐらいでざっくり眺めて、要素の詳細は各種ドキュメントを参照するような読み方を想定しています。かなり要素は増えていますね。40以上あります。

※「各種ドキュメントの情報は一般公開されているのでNDAに抵触しない」という解釈のもの記載しています。
※ beta1時点での情報です。

# [App Structure and Behavior](https://developer.apple.com/documentation/swiftui/app-structure-and-behavior?changes=latest_major)

## [App](https://developer.apple.com/documentation/swiftui/app?changes=latest_major)
アプリの構造や動作を表す型

```swift
protocol App
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [Scene](https://developer.apple.com/documentation/swiftui/scene?changes=latest_major)
システムが管理するライフサイクルを持つアプリのユーザーインターフェースの一部

```swift
protocol Scene
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [WindowGroup](https://developer.apple.com/documentation/swiftui/windowgroup?changes=latest_major)
同じように構成されたWindowの群を提示するScene

```swift
struct WindowGroup<Content> where Content : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [DocumentGroup](https://developer.apple.com/documentation/swiftui/documentgroup?changes=latest_major)
ドキュメントの開封・作成・保存をサポートできるシーン

```swift
struct DocumentGroup<Document, Content> where Content : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|

## [Settings](https://developer.apple.com/documentation/swiftui/settings?changes=latest_major)
アプリの設定を閲覧・変更するためのインターフェースを提示するシーン

```swift
struct Settings<Content> where Content : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| Mac Catalyst 14.0+|

## [WKNotificationScene](https://developer.apple.com/documentation/swiftui/wknotificationscene?changes=latest_major)
指定されたカテゴリのリモート通知またはローカル通知を受信した際に表示されるシーン

```swift
struct WKNotificationScene<Content, Controller> where Content : View, Controller : WKUserNotificationHostingController<Content>
```

| Availavitity     |
|:-----------------|
| watchOS 7.0+ |

## [Widget](https://developer.apple.com/documentation/swiftui/widget?changes=latest_major)
ホーム画面や通知センターに表示するウィジェットの設定と内容

```swift
protocol Widget
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|

## [WidgetBundle](https://developer.apple.com/documentation/swiftui/widgetbundle?changes=latest_major)
1つのウィジェット拡張機能から複数のウィジェットを公開するために使われるコンテナ

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|

## [ImportFilesAction](https://developer.apple.com/documentation/swiftui/importfilesaction?changes=latest_major)
ファイルのインポート機能を提供

```swift
struct ImportFilesAction
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|

## [ExportFilesAction](https://developer.apple.com/documentation/swiftui/exportfilesaction?changes=latest_major)
ファイルをエクスポートする機能を提供

```swift
struct ExportFilesAction
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|

## [OpenURLAction](https://developer.apple.com/documentation/swiftui/openurlaction?changes=latest_major)
URL を開く機能を提供

```swift
struct OpenURLAction
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

# [Views and Controls](https://developer.apple.com/documentation/swiftui/views-and-controls?changes=latest_major)

## [TextEditor](https://developer.apple.com/documentation/swiftui/texteditor?changes=latest_major)
長文テキストを表示・編集できるビュー

```swift
struct TextEditor
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|


## [SignInWithAppleButton](https://developer.apple.com/documentation/swiftui/signinwithapplebutton?changes=latest_major)
ユーザーがApple IDを使ってサインインできるようにするためにインターフェースに追加するコントロール

```swift
struct SignInWithAppleButton
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |

## [Menu](https://developer.apple.com/documentation/swiftui/menu?changes=latest_major)
アクションのメニューを表示するためのコントロール

```swift
struct Menu<Label, Content> where Label : View, Content : View
```

| Availavitity     |
|:-----------------|
| macOS 11.0+ |

## [ColorPicker](https://developer.apple.com/documentation/swiftui/colorpicker?changes=latest_major)
システムカラーピッカーのUIから色を選択するためのコントロール。

```swift
struct ColorPicker<Label> where Label : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|

## [ProgressView](https://developer.apple.com/documentation/swiftui/progressview?changes=latest_major)
タスクの完了に向けての進捗状況を示すビュー

```swift
struct ProgressView<Label> where Label : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [Gauge](https://developer.apple.com/documentation/swiftui/gauge?changes=latest_major)(ゲージ)
範囲内の値を表示するビュー

```swift
struct Gauge<Label, CurrentValueLabel, BoundsLabel, MarkedValueLabels> where Label : View, CurrentValueLabel : View, BoundsLabel : View, MarkedValueLabels : View
```

| Availavitity     |
|:-----------------|
| watchOS 7.0+ |

## [Label](https://developer.apple.com/documentation/swiftui/label?changes=latest_major)
ユーザーインターフェース項目の標準的なラベルで、タイトル付きのアイコンで構成されている

```swift
struct Label<Title, Icon> where Title : View, Icon : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [Link](https://developer.apple.com/documentation/swiftui/link?changes=latest_major)
URL に遷移するためのコントロール

```swift
struct Link<Label> where Label : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [ScaledMetric](https://developer.apple.com/documentation/swiftui/scaledmetric?changes=latest_major)
数値をスケーリングする動的プロパティ(DynamicProperty protocolではない)

```swift
@propertyWrapper struct ScaledMetric<Value> where Value : BinaryFloatingPoint
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |


# [View Layout and Presentation](https://developer.apple.com/documentation/swiftui/view-layout-and-presentation?changes=latest_major)

## [LazyHStack](https://developer.apple.com/documentation/swiftui/lazyhstack?changes=latest_major)
水平方向に成長するラインに子を配置し、必要に応じてアイテムを作成するビュー

```swift
struct LazyHStack<Content> where Content : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [LazyVStack](https://developer.apple.com/documentation/swiftui/lazyvstack?changes=latest_major)
縦方向に成長するラインに子を配置し、必要に応じてアイテムを作成するビュー

```swift
struct LazyVStack<Content> where Content : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [LazyHGrid](https://developer.apple.com/documentation/swiftui/lazyhgrid?changes=latest_major)
水平方向に成長するグリッドに子ビューを配置し、必要に応じてアイテムを作成するコンテナビュー

```swift
struct LazyHGrid<Content> where Content : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [LazyVGrid](https://developer.apple.com/documentation/swiftui/lazyvgrid?changes=latest_major)
子ビューを縦方向に成長するグリッドに配置し、必要に応じてアイテムを作成するコンテナビュー

```swift
struct LazyVGrid<Content> where Content : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [GridItem](https://developer.apple.com/documentation/swiftui/griditem?changes=latest_major)
行や列などの単一のグリッド項目の説明

```swift
struct GridItem
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [ScrollViewReader](https://developer.apple.com/documentation/swiftui/scrollviewreader?changes=latest_major)
その子が、その子の中のスクロール可能なビューをターゲットとする ScrollViewProxy の関数として定義されているビュー

```swift
@frozen struct ScrollViewReader<Content> where Content : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [ScrollViewProxy](https://developer.apple.com/documentation/swiftui/scrollviewproxy?changes=latest_major)
ビュー階層内のスクロール可能なビューをプログラムでスクロールできるようにするプロキシ値

```swift
struct ScrollViewProxy
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [OutlineGroup](https://developer.apple.com/documentation/swiftui/outlinegroup?changes=latest_major)
ツリー構造化された識別されたデータの基礎となるコレクションから、オンデマンドでビューと開示グループを計算する構造

```swift
struct OutlineGroup<Data, ID, Parent, Leaf, Subgroup> where Data : RandomAccessCollection, ID : Hashable
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|

## [DisclosureGroup](https://developer.apple.com/documentation/swiftui/disclosuregroup?changes=latest_major)
開示制御の状態に基づいて、別のコンテンツビューを表示または非表示にするビュー

```swift
struct DisclosureGroup<Label, Content> where Label : View, Content : View
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|

# [Drawing and Animation](https://developer.apple.com/documentation/swiftui/drawing-and-animation?changes=latest_major)

## [ContainerRelativeShape](https://developer.apple.com/documentation/swiftui/containerrelativeshape?changes=latest_major)
現在のコンテナ形状のインセット版に置き換えられる形状。コンテナ形状が定義されていない場合は、矩形に置き換えられる

```swift
@frozen struct ContainerRelativeShape
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [BackgroundStyle](https://developer.apple.com/documentation/swiftui/backgroundstyle?changes=latest_major)
現在のコンテキストに基づいて背景の正しい塗りつぶしを表示するスタイル

```swift
@frozen struct BackgroundStyle
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

# [Framework Integration](https://developer.apple.com/documentation/swiftui/framework-integration?changes=latest_major)

## [NSApplicationDelegateAdaptor](https://developer.apple.com/documentation/swiftui/nsapplicationdelegateadaptor?changes=latest_major)
AppKitからデリゲートを提供するためにAppで使用されるプロパティラッパー

```swift
@propertyWrapper struct NSApplicationDelegateAdaptor<DelegateType> where DelegateType : NSObject, DelegateType : NSApplicationDelegate
```

| Availavitity     |
|:-----------------|
| macOS 11.0+ |

## [UIApplicationDelegateAdaptor](https://developer.apple.com/documentation/swiftui/uiapplicationdelegateadaptor?changes=latest_major)
UIKitからデリゲートを提供するためにAppで使用されるプロパティラッパー

```swift
@propertyWrapper struct UIApplicationDelegateAdaptor<DelegateType> where DelegateType : NSObject, DelegateType : UIApplicationDelegate
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |

## [WKExtensionDelegateAdaptor](https://developer.apple.com/documentation/swiftui/wkextensiondelegateadaptor?changes=latest_major)
WatchKitからのデリゲートを提供するためにAppで使われるプロパティラッパー

```swift
@propertyWrapper struct WKExtensionDelegateAdaptor<DelegateType> where DelegateType : NSObject, DelegateType : WKExtensionDelegate
```

| Availavitity     |
|:-----------------|
| watchOS 7.0+ |

# [State and Data Flow](https://developer.apple.com/documentation/swiftui/state-and-data-flow?changes=latest_major)

## [StateObject](https://developer.apple.com/documentation/swiftui/stateobject?changes=latest_major)
観測可能なオブジェクトをインスタンス化するプロパティラッパー型

```swift
@frozen @propertyWrapper struct StateObject<ObjectType> where ObjectType : ObservableObject
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [FocusedBinding](https://developer.apple.com/documentation/swiftui/focusedbinding?changes=latest_major)
フォーカスされたビューやその祖先の一つから状態バインディングを観察し、自動的にアンラップするための便利なプロパティラッパー

```swift
@propertyWrapper struct FocusedBinding<Value>
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [FocusedValue](https://developer.apple.com/documentation/swiftui/focusedvalue?changes=latest_major)
フォーカスされたビューやその祖先の一つから値を観測するためのプロパティラッパー

```swift
@propertyWrapper struct FocusedValue<Value>
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [FocusedValues](https://developer.apple.com/documentation/swiftui/focusedvalues?changes=latest_major)
フォーカスされたビューとその祖先によってエクスポートされた状態のコレクション

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [FocusedValueKey](https://developer.apple.com/documentation/swiftui/focusedvaluekey?changes=latest_major)
フォーカスされた値を公開したり、観測したりする際に使用する識別子型のプロトコル

```swift
protocol FocusedValueKey
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [AppStorage](https://developer.apple.com/documentation/swiftui/appstorage?changes=latest_major)
UserDefaultsの値を反映し、そのユーザーデフォルトの値の変更に対するビューを無効にするプロパティのラッパー型

```swift
@frozen @propertyWrapper struct AppStorage<Value>
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

## [SceneStorage](https://developer.apple.com/documentation/swiftui/scenestorage?changes=latest_major)
シーンごとに永続的なストレージへの読み書きを行うプロパティラッパー型

```swift
@propertyWrapper struct SceneStorage<Value>
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |

# [Gestures](https://developer.apple.com/documentation/swiftui/gestures?changes=latest_major)
新規追加なし

# [Previews](https://developer.apple.com/documentation/swiftui/previews?changes=latest_major)
## [PreviewContext](https://developer.apple.com/documentation/swiftui/previewcontext?changes=latest_major)
PreviewContext のコンテキストの指定

```swift
protocol PreviewContext
```

| Availavitity     |
|:-----------------|
| iOS 14.0+        |
| macOS 11.0+ |
| Mac Catalyst 14.0+|
| tvOS 14.0+ |
| watchOS 7.0+ |