Open15

WWDC24 SwiftUIの基本

muranakarmuranakar

View

  • Declarative 宣言的
  • Compositional 構成型
  • State-drive 状態駆動
muranakarmuranakar

Declarative
宣言的プログラミングと命令型プログラミングは相互に排他的ではない

宣言型コードを使用すると、目的に到達するための手順ではなく、期待される結果に焦点を当てることが可能。
命令型のコードは状態を変更する場合、既存の宣言型コンポーネントが存在しない可能性がある場合に最適。

SwiftUIはUIの現在の状態がどうあるべきかを説明するものであり、時間の経過と命令的なコマンドを受け取る。

muranakarmuranakar

Compositional

  • 再構築が簡単。Viewを動かしてすぐにCanvasに反映される。
  • コード自体は、作成しているViewの階層に似ている。
  • SwiftUIの構文はViewBuilderClosureを使用して、子の宣言をする

ドキュメントHstack (翻訳:ChatGPT)

/// ![5つのテキストビュー、名前はItem 1からItem 5までで、横一列に配置されています。](SwiftUI-HStack-simple.png)
///
/// > 注意: ``AnyLayout`` を使用して条件付きレイアウトを作成する場合など、
/// ``Layout`` プロトコルに準拠する水平スタックが必要な場合は、代わりに ``HStackLayout`` を使用してください。
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
@frozen public struct HStack<Content> : View where Content : View {

    /// 指定された間隔と垂直位置合わせで水平スタックを作成します。
    ///
    /// - Parameters:
    ///   - alignment: このスタック内のサブビューを配置するためのガイド。
    ///     このガイドは、すべてのサブビューに同じ垂直スクリーン座標を持ちます。
    ///   - spacing: 隣接するサブビュー間の距離、または
    ///     スタックに各ペアのサブビューに対してデフォルトの距離を選択させたい場合は `nil`。
    ///   - content: このスタックの内容を作成するビュー ビルダー。
    @inlinable public init(alignment: VerticalAlignment = .center, spacing: CGFloat? = nil, @ViewBuilder content: () -> Content)

    /// このビューの本体を表すビューのタイプ。
    ///
    /// カスタムビューを作成する場合、Swiftは必要な ``View/body-swift.property`` プロパティの
    /// 実装からこのタイプを推測します。
    public typealias Body = Never
}

muranakarmuranakar

Compositional

  • View modifiersがSwiftUIの中で重要な役割を果たす。
  • ベースViewに変更を加えるために必要。
muranakarmuranakar
  • 値が変更されると、新しいViewValuesが生成され、SwiftUIに与えられる。

  • Viewの値を使用して、更新する方法を決定

  • SwiftUIではView本体に、特定のプロパティへの依存関係を作成する。

muranakarmuranakar

状態管理のために重要な要素

  • @State
    Viewの新しい内部データを作成

  • @Binding
    他のViewへの双方向の参照を作成

muranakarmuranakar

Animationさせたい場合は、状態管理しているプロパティをwithAnimationでラップ
デフォルトのアニメーションが適応される。

数値に合わせたアニメーションを用いることも可能

muranakarmuranakar
  • 宣言型Viewの利点の1つは、適応性

  • 例えばButtonであれば、様々な状況下で用いることが可能

  • Modifiersも同様に

muranakarmuranakar
  • アプリ定義全体は、Viewと同じ原則で構築されている。

  • アプリは場面によって、定義される宣言的な構造

  • WindowGroupはシーンの一種。
    ⇒ ContentViewを用いて作成される。

  • MacOSなどのマルチウィンドウなどではWindowGroupを複数用いる。

  • SwiftUIはあらゆるPlatformで用いられる。

muranakarmuranakar

タイトル通り、基本的な部分が多め。SwiftUIのメリットを活かしていきます。