View の identity 意識してる?

5.1K Views

June 30, 25

スライド概要

profile-image

koshimizu takehito / iOS app engineer

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

View の identity 意識してる? 小清水 健人 2025/05/30

2.

identityとは

3.

identityとは • SwiftUIのViewツリーにおいて要素を一意に識別 • 差分更新やアニメーションにおける識別に利用

4.

Explicit Identity

5.

明示的な値によって管理される Identity

6.

Explicit Identity Person に id を定義する

7.

Explicit Identity Person の id で View に Identity を割り当てる

8.

Explicit Identity Person の KeyPath で View に Identity を割り当てる

9.

Explicit Identity id(_:) モディファイアで View に Identity を割り当てる

10.

Structural Identity

11.

View構造と型によって管理される Identity

12.

Structural Identity View構造と型によって、 暗黙的に割当られる

13.

Quiz 1

14.

どちらの実装が正しい? A B

15.

どちらの実装が正しい? A B

16.

どちらの実装が正しい? A B

17.

どちらの実装が正しい? • TextField で入力 • Person.name が更新 • Person 自身のハッシュ値が更新 • List 要素の identity が更新される • List が更新される • UICollectionView の Reload • First responder を辞める • UITextField のキーボードが閉じる A

18.

どちらの実装が正しい? • TextField で入力 • Person.name が更新 • Person 自身のハッシュ値が更新 • List 要素の identity は更新されない • List 自体の更新はない • UICollectionView の Reload なし • First responder は継続 • UITextField のキーボードは閉じない B

19.

Quiz 2

20.

どちらの実装が正しい? A B

21.

どちらの実装が正しい? A B

22.

どちらの実装が正しい? A B

23.

どちらの実装が正しい? • Structural Identity で識別 • Text("99") に Identity が割当 • Text("0") にも異なる Identity が割当 • 2つの Text を同一視できない • 別オブジェクトとしてアニメーション A

24.

どちらの実装が正しい? • Structural Identity で識別 • Text("...") に 1つの Identity が割当 • body 再評価時に同一視される • 同一オブジェクトとしてアニメーション B

25.

Quiz 3

26.

どちらの実装が正しい? A B

27.

どちらの実装が正しい? A B

28.

どちらの実装が正しい? A B

29.

どちらの実装が正しい? • Button のタップで number が更新 • body 再評価 • Child が初期化 • Child の number が更新 A

30.

どちらの実装が正しい? • Button のタップで number が更新 • body 再評価 • Child が初期化 • Child の number は再初期化されない • @State は SwiftUI 内部ストレージで管理 • SwiftUI 内部ストレージは identity をキーにする • Child の identity に変更がない • SwiftUI 内部ストレージ から破棄されない B

31.

どちらの実装が正しい? • Explicit Identity で一意性を壊す • SwiftUI 内部ストレージ から破棄される

32.

Quiz おしまい ありがとうございました