5.1K Views
June 30, 25
スライド概要
koshimizu takehito / iOS app engineer
View の identity 意識してる? 小清水 健人 2025/05/30
identityとは
identityとは • SwiftUIのViewツリーにおいて要素を一意に識別 • 差分更新やアニメーションにおける識別に利用
Explicit Identity
明示的な値によって管理される Identity
Explicit Identity Person に id を定義する
Explicit Identity Person の id で View に Identity を割り当てる
Explicit Identity Person の KeyPath で View に Identity を割り当てる
Explicit Identity id(_:) モディファイアで View に Identity を割り当てる
Structural Identity
View構造と型によって管理される Identity
Structural Identity View構造と型によって、 暗黙的に割当られる
Quiz 1
どちらの実装が正しい? A B
どちらの実装が正しい? A B
どちらの実装が正しい? A B
どちらの実装が正しい? • TextField で入力 • Person.name が更新 • Person 自身のハッシュ値が更新 • List 要素の identity が更新される • List が更新される • UICollectionView の Reload • First responder を辞める • UITextField のキーボードが閉じる A
どちらの実装が正しい? • TextField で入力 • Person.name が更新 • Person 自身のハッシュ値が更新 • List 要素の identity は更新されない • List 自体の更新はない • UICollectionView の Reload なし • First responder は継続 • UITextField のキーボードは閉じない B
Quiz 2
どちらの実装が正しい? A B
どちらの実装が正しい? A B
どちらの実装が正しい? A B
どちらの実装が正しい? • Structural Identity で識別 • Text("99") に Identity が割当 • Text("0") にも異なる Identity が割当 • 2つの Text を同一視できない • 別オブジェクトとしてアニメーション A
どちらの実装が正しい? • Structural Identity で識別 • Text("...") に 1つの Identity が割当 • body 再評価時に同一視される • 同一オブジェクトとしてアニメーション B
Quiz 3
どちらの実装が正しい? A B
どちらの実装が正しい? A B
どちらの実装が正しい? A B
どちらの実装が正しい? • Button のタップで number が更新 • body 再評価 • Child が初期化 • Child の number が更新 A
どちらの実装が正しい? • Button のタップで number が更新 • body 再評価 • Child が初期化 • Child の number は再初期化されない • @State は SwiftUI 内部ストレージで管理 • SwiftUI 内部ストレージは identity をキーにする • Child の identity に変更がない • SwiftUI 内部ストレージ から破棄されない B
どちらの実装が正しい? • Explicit Identity で一意性を壊す • SwiftUI 内部ストレージ から破棄される
Quiz おしまい ありがとうございました