---
title: View の identity 意識してる？
tags:  #swiftui  
author: [小清水健人](https://www.docswell.com/user/_take_hito_)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/PJR5N6RWE9.jpg?width=480
description: View の identity 意識してる？ by 小清水健人
published: June 30, 25
canonical: https://www.docswell.com/s/_take_hito_/ZY1RVD-2025-06-30-161254
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/PJR5N6RWE9.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/PEXKNMRVJX.jpg)

identityとは


# Page. 3

![Page Image](https://bcdn.docswell.com/page/3EK5NGR5JD.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/L73KVN8175.jpg)

Explicit Identity


# Page. 5

![Page Image](https://bcdn.docswell.com/page/87D38WMKJG.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/VJP489R378.jpg)

Explicit Identity
Person に id を定義する


# Page. 7

![Page Image](https://bcdn.docswell.com/page/2EVXNMRNJQ.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/57GVKGM57L.jpg)

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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/4EQ6NXRLEP.jpg)

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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/KJ44G685J1.jpg)

Structural Identity


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LE14DV22EG.jpg)

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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GEWXYLR272.jpg)

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


# Page. 13

![Page Image](https://bcdn.docswell.com/page/47Z6XMR473.jpg)

Quiz 1


# Page. 14

![Page Image](https://bcdn.docswell.com/page/YJ624NRG7V.jpg)

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


# Page. 15

![Page Image](https://bcdn.docswell.com/page/GJ52Q58XJ4.jpg)

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


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LE3KVN84E5.jpg)

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


# Page. 17

![Page Image](https://bcdn.docswell.com/page/8ED38WM57G.jpg)

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


# Page. 18

![Page Image](https://bcdn.docswell.com/page/V7P489RDE8.jpg)

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


# Page. 19

![Page Image](https://bcdn.docswell.com/page/2JVXNMRG7Q.jpg)

Quiz 2


# Page. 20

![Page Image](https://bcdn.docswell.com/page/5EGVKG6DEL.jpg)

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


# Page. 21

![Page Image](https://bcdn.docswell.com/page/4JQ6NX4XJP.jpg)

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


# Page. 22

![Page Image](https://bcdn.docswell.com/page/K744G6Q271.jpg)

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


# Page. 23

![Page Image](https://bcdn.docswell.com/page/LJ14DVPKJG.jpg)

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


# Page. 24

![Page Image](https://bcdn.docswell.com/page/GJWXYL2PE2.jpg)

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


# Page. 25

![Page Image](https://bcdn.docswell.com/page/4EZ6XMD6E3.jpg)

Quiz 3


# Page. 26

![Page Image](https://bcdn.docswell.com/page/Y7624N1LEV.jpg)

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


# Page. 27

![Page Image](https://bcdn.docswell.com/page/G752Q54M74.jpg)

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


# Page. 28

![Page Image](https://bcdn.docswell.com/page/9J24PNVR7R.jpg)

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


# Page. 29

![Page Image](https://bcdn.docswell.com/page/DEYM5P35EM.jpg)

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


# Page. 30

![Page Image](https://bcdn.docswell.com/page/VJNWN5V4J8.jpg)

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


# Page. 31

![Page Image](https://bcdn.docswell.com/page/YE9XRY6473.jpg)

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


# Page. 32

![Page Image](https://bcdn.docswell.com/page/GE82W6ZVED.jpg)

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


