SwiftとSwift UIとの違いはSwiftが言語なのに対してSwiftUIはフレームワークであるという点です。つまりSwiftから派生でできたのがSwiftUIです。
SwiftUI
SwiftUIでは、Swiftを利用してすべてのAppleプラットフォーム向けに、驚くほど少ないコードで美しいAppを構築できます。1つにまとまったツールとAPIを使用するだけで、あらゆるAppleデバイス向けに優れたユーザー体験を提供できます。
Navigation API
Appのナビゲーション動作にプログラム制御を活用し、起動状態の設定、サイズクラスの変更の管理、ディープリンクへの応答などを実行できます。
高度なレイアウトコントロール
先進的で再利用可能なレイアウトを構築し、Appのデザインを強化しましょう。VStackとHStackに加え、SwiftUIでは、縦横の両方向でビューの配置を同時に調整する、新しいGrid APIを利用できるようになりました。また、新しいローレベルのカスタムLayout APIを使用すれば、Appにぴったりのレイアウトを自由自在に構築できます。SwiftUIに新しく含まれるViewThatFitsにより、各ビューのバリエーションを複数指定して、利用可能なスペースに最適なものをSwiftUIに自動的に選んでもらうことができます。
macOS向けの改良
macOSでのウインドウ表示のサポートが強化され、1つの固有ウインドウを作成し、ウインドウの位置、サイズ調整、リサイズのための新しい修飾子を利用することができます。SwiftUIでメニューバーに追加のメニューを構築すれば、ユーザーはMacのどこからでもAppの機能にアクセスできるようになります。
UIKit相互運用性の向上
SwiftUIは他のインターフェイスフレームワークと連係するよう設計されています。デベロッパはSwiftUIの宣言型シンタックスを使って、簡単にカスタムのUICollectionViewセルを記述できるようになりました。これらのカスタムセルはUIKitと完全に一体化し、スワイプアクションやセルのバックグラウンドといった、デベロッパが求める機能がすべて提供されます。
UICollectionViewセル
基本的にスクロールすることで小さい画面を有効に使えるようにできるUIです。
マス目のセルを選択して画面遷移し、拡大表示する設定で、セルの一つを選択タップして、画面遷移にて新しい画面でその画像を拡大表示というアプリを考えて見ます。
Swift Charts
あらゆるAppleプラットフォームで見た目も良く操作感に優れ、カスタマイズ性の高いグラフを使ってデータを視覚化しましょう。Swift Chartsでは、SwiftUIのコンポジショナルシンタックスを用いて、線グラフや棒グラフから、ストリームグラフといった高度なタイプまで、多くの機能を含むビューを作成します。Swift ChartsはVoiceOverもサポートしているので、あらゆるユーザーに情報を届けることができます。
VoiceOver
VoiceOverとはAppleのmacOS、iOS、iPodに内蔵されているスクリーンリーダーである。VoiceOverを使うことでユーザーは音声説明でMacintoshやiOSデバイスを使用することができる。
その他のコンポーネントのサポート
SwiftUIは、多くの既存のUIコンポーネントに対応するため拡張を続けています。こうしたコンポーネントには、ユーザーがさらに情報を表示したいときにメインビューの上にスライドするハーフシートや、デバイスにインストールされたすべてのShare Extensionを活用できるようにする共有シートなどがあります。また、Macの複数列テーブルAPIがiPadで利用できるようになったため、表形式データの表示がこれまで以上に簡単になります。
Share Extension
今開いてるページの記事やデータを共有したいアプリにPostして、そのデータの共有行うことが可能です。
新しいSharing API
新しいTransferableプロトコルにより、クリップボード、ドラッグ&ドロップ、共有シートでデータを利用できるようになります。さらに、SwiftUIから直接このプロトコルを呼び出すことができます。
Transferable
iOS 16から利用可能なプロトコルです。
その名の通り転送可能であることを示すプロトコルです。
転送可能になることでDrag & DropなどのUI上でアイテムを転送可能にしたりすることができます。
ロック画面上のウィジェット
SwiftUIを使って、ロック画面上でウィジェットを魅力的に表示しましょう。ユーザーが一目で情報を確認できる、美しいアイコンやゲージなどの要素を作成できます。
宣言型シンタックス
SwiftUIは宣言型lシンタックスを使用しているため、ユーザーインターフェイスの動作をシンプルに記述することができます。たとえば、テキストフィールドからなるアイテムのリストを作成すると書いてから、各フィールドの配置、フォント、色を記述するといった具合です。これにより、コードがかつてないほどシンプルで読みやすくなり、時間の節約と保守作業の負担軽減につながります。
import SwiftUI
struct AlbumDetail: View {
var album: Album
var body: some View {
List(album.songs) { song in
HStack {
Image(album.cover)
VStack(alignment: .leading) {
Text(song.title)
Text(song.artist.name)
.foregroundStyle(.secondary)
}
}
}
}
}
この宣言型のスタイルは、アニメーションなどの複雑な概念にも適用されます。わずか数行のコードを書くだけで、ほとんどすべてのコントロールに簡単にアニメーションを追加し、すぐに使用できるエフェクトのコレクションを選択することができます。実行時には、スムーズな動きを生み出すために必要な手順を、すべてシステムが処理してくれます。また、アニメーション中に発生するユーザーの操作や状態の変更にも対処します。このように簡単にアニメーションを追加できるため、生き生きとしたAppを創る新たな方法が見つかることでしょう。
デザインツール
Xcodeには、SwiftUIを使ったインターフェイス構築をドラッグ&ドロップなどの簡単な操作で行える直感的なデザインツールが含まれています。デザインキャンバスでの編集内容と、隣接するエディタ内のコードはすべて完全に同期されます。コードを入力するとすぐにプレビューで確認でき、ライトモードやダークモードなど、複数の構成でUIを確認することもできます。変更内容はXcodeによって瞬時に再コンパイルされ、実行中のAppに挿入されるため、いつでも確認、編集できます。
ドラッグ&ドロップ
ユーザーインターフェイス内のコンポーネントの位置は、キャンバス上でコントロールをドラッグするだけで調整できます。クリックするとインスペクタが開き、フォント、色、配置、その他のデザインオプションを選択できます。コントロールの調整を、カーソルで簡単に行うことができます。こうした視覚的なエディタで提供される機能の多くはコードエディタ内でも使用できるため、インターフェイスを手入力でコーディングすることを好む場合であっても、各コントロールに追加する新しい修飾子をインスペクタで見つけることができます。ライブラリからコントロールをドラッグして、デザインキャンバスまたはコード上に直接ドロップすることもできます。
ダイナミックリプレースメント
SwiftのコンパイラとランタイムはXcode全体に完全に埋め込まれているため、Appは常にビルドされ実行されます。表示されるデザインキャンバスは、単にユーザーインターフェイスに似せたものではなく、実際のAppそのものです。また、ダイナミックリプレースメントを使って、Xcodeは編集したコードを実際のAppに直接組み入れることができます。
プレビュー
SwiftUIビューのプレビューを1つまたは複数作成して、サンプルデータを取得できるようになりました。これにより、ユーザーに表示されるほとんどすべての要素(ラージフォント、ローカリゼーション、ダークモードなど)をそれぞれに設定することができます。さらに、プレビューでは、作成したUIをどのデバイスのどの向きでも表示することができます
UIKitおよびAppKitとの連係
SwiftUIはUIKitおよびAppKitと連係するよう設計されているため、既存のAppに段階的に導入していくことができます。新しいユーザーインターフェイスを構築したり、既存のインターフェイスを再構築したりする場合は、他のコードベースはそのまま維持しながら、SwiftUIを使用することができます。
また、使用したいインターフェイス要素がSwiftUIに含まれていない場合は、SwiftUIとUIKit、AppKitを自由に組み合わせて、 それぞれの良さを有効活用できます。