SwiftUIはAppleの宣言的UIフレームワークです。与えられた状態に対してUIがどう見えるべきかを記述すると、フレームワークがそれをどうやって描画・更新するかを判断します。UIKitのようにビューを手動で変更する必要はなく、状態を変更すればUIが自動的に再描画されます。
仕組み
ビューは View プロトコルに準拠し、計算プロパティ body からそのコンテンツを返します。 はそのビューのプロパティの純粋関数です。
SwiftUIはAppleの宣言的UIフレームワークです。与えられた状態に対してUIがどう見えるべきかを記述すると、フレームワークがそれをどうやって描画・更新するかを判断します。UIKitのようにビューを手動で変更する必要はなく、状態を変更すればUIが自動的に再描画されます。
ビューは View プロトコルに準拠し、計算プロパティ body からそのコンテンツを返します。 はそのビューのプロパティの純粋関数です。
bodystruct Counter: View {
@State private var count = 0 // source of truth
var body: some View { // opaque return type
VStack(spacing: 12) {
Text("Count: \(count)") // re-reads count each render
Button("Increment") {
count += 1 // mutating state triggers re-render
}
}
}
}
some View は**不透明な戻り値型(opaque return type)**です。「コンパイラによって決定される、何らかの具体的な View 型」を意味します。複雑にネストしたビュー型を明示的に書き出すことなく返せる一方で、パフォーマンスのために型を静的に保ちます。
label.text = "Count: \(count)" — 各変更を自分でプッシュします。Text("Count: \(count)") — 関係を一度だけ宣言し、count が変わるとフレームワークが body を再呼び出しして結果を差分適用します。ビューは軽量なstructで、状態が変わるたびに安価に生成・破棄できます。SwiftUIは背後にある描画ツリーを保持し、差分だけを適用します。
宣言的モデルは、UIがデータと同期しなくなるというUIKitのバグ群を丸ごと取り除きます。body が状態変化のたびに再実行され、安価な純粋関数であり続けなければならないと理解することが、状態からパフォーマンスまでSwiftUIのすべての基礎になります。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する