BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース SwiftUIがチャート、データ駆動型ナビゲーションなどを提供

SwiftUIがチャート、データ駆動型ナビゲーションなどを提供

ブックマーク

原文(投稿日:2022/06/07)へのリンク

WWDC 2022で、AppleはSwiftUIの新しいイテレーションを発表した。これは、iOS、iPadOS、macOS、watchOS向けのUIを構築するための宣言型フレームワークである。最も重要な目玉として、SwiftUIの新しいグラフ作成機能、洗練されたナビゲーション、新しいコントロールなどがある。

SwiftUIのエンジニアのNick Teissler氏が述べているように、最新のSwiftUIのリリースは、主にAppleでの採用によって推進された。

SwiftUIがAppleでのアプリの作成方法を進化させたが、それによってのみ、この新しいデザインと機能の多くが実現されています。

Swift Chartsは、状態駆動型チャートを作成するための宣言型フレームワークである。これは、棒グラフと折れ線グラフを作成する手段である。

Chart(datapoints) { datapoint
    BarMark(
        x: .value("X-Axis-Label", datapoint.valueX),
        y: .value("Y-Axis-Label", datapoint.valueY)
    )
}

Chart(datapoints) { datapoint
    LineMark(
        x: .value("X-Axis-Label", datapoint.valueX),
        y: .value("Y-Axis-Label", datapoint.valueY)
    )
    .foregroundStyle(by: .value("Category", task.category))
}

Swift Chartsでは、ほとんどのケースで意味のある結果が生成されるように色、凡例、スケールなどのデフォルト値が選択されるとTeissler氏は言っている。チャートにいくつかの修飾子を適用して、そのすべてのtrait(特性)をカスタマイズできる。また、チャート内でSwiftUIビューを使って、複雑なカスタムチャートを作成することもできる。

ナビゲーションとウィンドウ管理について言えば、SwiftUIは、スタック、分割ビュー、シーンなど、ウィンドウ管理の最も一般的な3つのパターンを更新している。

新たなNavigationStackにより、既存のNavigationViewが廃止され、データ駆動型のナビゲーションモデルが提供される。NavigationStackは、既存のNavigationLinkと互換性があるが、新たなnavigationDestination修飾子もサポートする。navigationDestination修飾子は、ナビゲーション先を具体的なデータ型に関連付けるものである。navigationDestinationは、新たなNavigationLink構文で使用できる。この構文では、宛先のビューでなく、宛先を表す値を扱うことができる。そのため、NavigationLinkで定義されたリンクをタップすると、SwiftUIは、navigationDestinationで定義される型指定された宛先を検査することにより、対応するビューを見つけてスタックにプッシュする。

NavigationStack {
    List(items) { item in
        NavigationLink(value: item) {
            ...
        }
    }
    .navigationDestination(for: SpecificType.self) { item in
        SpecificTypeView(item: item)
    }
}

データ駆動型であるということは、たとえば、現在のナビゲーションパスを、最上位レベルから現在の値までの値の配列として単純に表すことができることを意味する。

新たなNavigationSplitViewを使うと複数列のレイアウトを定義できる。例えば、アイテムのサイドバーリストや、サイドバーアイテムをタップしたときに表示される詳細ビューである。NavigationSplitViewでは、上述の新たなデータ駆動型ナビゲーションモデルもサポートする。分割ビューは特にiPadOSを対象としているが、小さなディスプレイでは自動的にスタックビューに変換される。

前述のように、SwiftUIには、新しいコントロール、そして既存のコントロール、フォーム、テーブルに対するより高度なカスタマイズが追加されている。

フォームは、コントロールを視覚的にグループ化し、OSのデフォルトやディスプレイサイズと一貫性が保たれるように、その視覚的な外観と配置を自動的に処理するためのメカニズムである。

コントロールの更新により、TextFieldが追加された。垂直方向に拡大して固定数の行をサポートするようにTextFieldを作成できる。Stepperでは、その値のフォーマットを扱えるようになり、watchOSで利用できるようになった。

テーブルがiPadOSとiOSでサポートされるようになった。そのため、すべてのプラットフォームで実行できるアプリを簡単に作成できる。iPadOSではmacOSと同じ複数列のビューを維持するが、iPhoneの表示サイズが制限されているため、テーブルには主な列のみを表示する必要がある。テーブルでは、新たなcontextMenu修飾子を使ってコンテキストアクションをサポートできるようになった。この修飾子は、具体的なデータ型に対して適用され、単一行か複数行で機能する。

簡単に共有できるようにするために、SwiftUIでは新たなクロスプラットフォームのプライバシー保護フォトピッカーを導入している。ShareLinkビューを使った新たな共有シートがある。ShareLinkビューでは、共有したいデータをプレビューに関連付け、従来の共有ボタンに接続する。そして、dropDestination修飾子が追加されており、ドラッグアンドドロップの実装するために使うことができる。

最後に、SwiftUIではグラフィックスとレイアウト機能が拡張されている。グラフィックフロントには、新しい形状、そして、グラデーション、ドロップシャドウ、アニメーションなどのカラーオプションがある。新しいLayoutプロトコルを使って、単純なグリッドを超えた複雑なレイアウトを作成できるようになった。Teissler氏によると、これによりAppKit命令型APIと同等レベルの制御が宣言型で提供される。

作者について

この記事に星をつける

おすすめ度
スタイル

BT