Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SwiftUIのObservationツールの挙動をテストしてみた
Search
KenShih
March 13, 2025
Programming
0
160
SwiftUIのObservationツールの挙動をテストしてみた
KenShih
March 13, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
RailsGirls IZUMO スポンサーLT
16bitidol
0
190
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
300
Node-RED を(HTTP で)つなげる MCP サーバーを作ってみた
highu
0
120
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
210
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
560
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
260
すべてのコンテキストを、 ユーザー価値に変える
applism118
3
1.4k
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
2
120
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
440
iOS 26にアップデートすると実機でのHot Reloadができない?
umigishiaoi
0
130
코딩 에이전트 체크리스트: Claude Code ver.
nacyot
0
690
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
640
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
Into the Great Unknown - MozCon
thekraken
40
1.9k
Balancing Empowerment & Direction
lara
1
440
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
For a Future-Friendly Web
brad_frost
179
9.8k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Site-Speed That Sticks
csswizardry
10
690
Transcript
Ken from LINEϠϑʔגࣜձࣾ SwiftUIͷObservationπʔϧͷڍ ಈΛςετͯ͠Έͨ ϞόνΩ #7 2025/3/13
Today's Agenda • ༰ɿ • ҰॹʹαϯϓϧίʔυΛݟͯΈΔ • ObservationπʔϧͷڍಈΛਂ۷Γ͢Δ • ඪɿ
• ͜ΕΒͷπʔϧ͕Ͳ͏ಈ͘ͷ͔ཧղ͢Δ • Ͳ͏ͬͯϏϡʔͷ࠶ܭࢉΛҾ͖ى͜͢ͷֶ͔Ϳ
SwiftUIʹ͓͚ΔObservationͱԿͰ͔͢ʁ • Ұൠతʹɿ • σʔλͷมԽΛ͢ΔͨΊͷπʔϧ • ओͳ༻్ɿ • SwiftUIͷͨΊʹઃܭ͞Ε͓ͯΓɺσʔλͷมԽʹԠͯ͡UIΛࣗಈతʹߋ৽ ͠·͢ɻ
ओཁͳٕज़ᶃ @State • తɿϏϡʔͰϩʔΧϧͳσʔλͷมԽ Λ͢Δ • λΠϓɿܕʢྫɿIntɺStringɺBoolɺ Structʣ • ྫ:
ΧϯλʔϏϡʔ
@StateͷมߋʹΑΓɺ Ϗϡʔͷߋ৽ͷݕূ
݁Ռ: @StateͷมߋʹΑΔϏϡʔͷߋ৽ͷݕূ • ෆཁͳ࠶ߋ৽ͷࢭ • @Stateɺ͋Δఔɺෆཁͳ࠶ߋ৽Λ͙͜ͱ͕Ͱ͖·͢ɻ • ༻͞Εͳ͍߹ͷಈ࡞ • @State͕༻͞Εͳ͍߹ɺ࠶ߋ৽ߦΘΕ·ͤΜɻ
• σʔλͷࢹ • ҰσʔλΛ༻͢ΔͱɺͦͷσʔλͷมߋΛͣͬͱࢹ͠·͢ɻ
@State͔Β࣍ͷεςοϓ • γϯϓϧͳঢ়ଶཧʹ͍͍͢ • ܕγϯϓϧͳϏϡʔʹ࠷ద • ࠓͷͱ͜ΖɺϏϡʔͷγϯϓϧͳঢ়ଶཧʹ͍͍ͯ·͢ • ෳࡶͳΞϓϦέʔγϣϯͰ… •
ΞϓϦ͕ෳࡶԽ͢Δͱɺಈ͖ΛϏϡʔ͔Β͚Δඞཁ͕͋Γ·͢ • େ͖ͳϓϩδΣΫτͰɺ࠶ར༻ੑςετͷ͢͠͞ɺϝϯςφϯεੑ͕ॏཁ
ओཁͳٕज़ᶄ @ObservedObject for ࢀরܕ • తɿϏδωεϩδοΫΛ࣋ͭΫϥεͷσʔ λมԽΛࢹ͠ɺϏϡʔΛߋ৽͢Δ • खॱ: 1.
ϞσϧΫϥεΛObservableObjectϓϩτ ίϧʹ४ڌͤ͞Δ 2. ࢹରΛ@Publishedʹ͢Δ 3. ϏϡʔͰ@ObservedObjectΛ༻͢Δ 1⃣ 2⃣ 3⃣
@ObservedObjectͷมߋʹΑΓɺ Ϗϡʔͷߋ৽ͷݕূ
@ObservedObjectͷಈ࡞ͷݕূ݁Ռͱݒ೦ • ݒ೦ • ͍ํΛؒҧ͍͑͢͠Ͱ͢ • @PublishedΛ͚Δ͔ͷஅɹ • ͲͷϓϩύςΟʹ@PublishedΛ͚Δ͔ΛܾΊΔͷ͍͠Ͱ͢ɻ •
ඞཁҎ্ʹϏϡʔ͕ߋ৽͞Εͯ͠·͏Մೳੑ͕͋Γ·͢ɻ • ϓϩύςΟʹ@Published͕͚Δͱɺ༻͠ͳͯ͘ߋ৽͞Ε·͢ɻ • @Stateͷಈ࡞ͱٯͰ͢
ωετ͞Εͨ @ObservedObjectͷಈ࡞ͷݕূ
ωετ͞Εͨ@ObservedObjectͷಈ࡞ͷݕূͷ݁Ռ ՝ • ωετ͞ΕͨObservableΦϒδΣΫτѻ͍͕͍͠ • ࢠͷঢ়ଶมԽΛ؍͢ΔͨΊʹ໌֬ʹ͠ͳ͍ͱ͍͚ͳ͍ͷͰɺෳࡶʹͳΔ • ᘳʹཧ͢Δͷ͘͠ɺఘΊͯͯ͢ͷঢ়ଶมԽΛߪಡ͕ͪ͠Ͱ͢ • SwiftUIʹωετ͞ΕͨObservableΦϒδΣΫτʹର͢Δ༗ޮͳղܾࡦ͕ܽ
͚͍ͯΔ
ओཁͳٕज़ᶅ iOS 17Ͱಋೖ͞Εͨ৽͍͠Observationπʔϧ @Observable macro • ಛ: • @State@ObservedObjectΛΘͣʹɺ ΑΓγϯϓϧͳίʔυͰσʔλͷมԽΛ
͢Δ
@Observable macroͷมߋʹΑΔ Ϗϡʔͷߋ৽ͷݕূ
@Observable macroͷݕূ݁Ռ • Ϟσϧͷมߋཧ͕؆୯ʹ • Ϟσϧͷมߋ͕ϏϡʔʹͲ͏Өڹ͢Δ͔ΛࣗಈͰཧͰ͖ΔͷͰɺίʔυ͕γϯ ϓϧʹͳΓ·͢ɻ • γϯϓϧͳ࣮ •
ϞσϧΛ@ObservableͰϚʔΫ͢Δ͚ͩ • @Published@ObservedObjectෆཁ • ωετ͞ΕͨϞσϧͰεϜʔζʹಈ࡞͠·͢ɻ
⚠@ObservableͰܕͷ༻ʹؔ͢Δҙ • ObservableϞσϧͰܕΛࢀর͢Δͱɺมߋ͕ͳͯ͘࠶ߋ৽͕ൃੜ͢Δ • ྫ͑ɺܕͷArrayͷมΛࢀর͢Δ • ྻશମΛࢹͯ͠͠·͍·͢ • Arrayͷ1͚ͭͩΛࢀর͍ͯͯ͠ɺଞͷΞΠςϜͷมߋͰϏϡʔ͕࠶ߋ ৽͞Ε·͢ɻ
• ͜ͷڍಈɺଞͷܕʹൃੜ͠·͢(StructDictionary)
@ObservableͰͷܕͷ༻ςετ
StructΛClassʹม͖͔͢ • @ObservableͷӨڹɿ • ڧྗ͕ͩɺΞϓϦશମͰࢀরܕΛ͛Δ͜ͱʹͳΔ • ࢀরܕͷγϑτ • ͜Ε·Ͱɺ७ਮͳϞσϧʹܕ͕ΘΕ͖ͯͨ •
͔͠͠ɺAppleͷ࠷৽ͷαϯϓϧͰɺυϝΠϯλΠϓʹStructΛΘͳ͍ํʹਐΜͰ͍Δ • જࡏతͳσϝϦοτɿ • Struct͔ΒClassʹม͑Δͱɺ ෭࡞༻ͷͱσόοά͕͘͠ͳΔ • ϓϩτίϧʹࣗಈͰରԠ͢Δػೳ͕͑ͳ͘ͳΔ
ྫɿObservableϞσϧͰେ͖ͳܕΛ͍࣋ͬͯΔ߹
Structͱ@Observableͷকདྷల • কདྷతʹ • Struct͕@ObservableΛαϙʔτ͢ΔՄೳੑ͕͋Γ·͢ɻ • ͜ΕʹΑΓɺܕͷརΛ׆͔ͭͭ͠ɺ@ObservableͷػೳΛར༻Ͱ͖Δ͔͠Ε·ͤΜɻ • ݱঢ়ͷ՝: •
Structίϐʔ͕ൃੜ͠ɺΫϥεͷΑ͏ʹ҆ఆͨࣝ͠ผࢠΛ࣋ͨͳ͍ͨΊɺมߋͷ͕͍͠Ͱ ͢ɻ • ΫϥεͷΑ͏ͳ؍ํ๏͕͑ͳ͍ͨΊɺݴޠͷΈΛݟ͢ඞཁ͕͋Γ·͢ɻ • Apple SwiftίϛϡχςΟͰ͜ͷ͕ٞਐߦதͰ͢ɻSE-0395: Observability
Recap • @Stateͱ@ObservedObject • @State: ܕɺγϯϓϧͳঢ়ଶཧʹ࠷దɺ • @ObservedObject: ࢀরܕɺϏδωεϞσϧʹ༻ɻͨͩ༻͕͘͠ɺؒҧ͍͍͢ɻ •
@ObservableϚΫϩ: • ৽ػೳ: iOS 17ͰಋೖɺσʔλมԽΛޮతʹࢹɻ • ڧྗ͕ͩΫϥεͷҠߦ: @Observableར༻ͷͨΊʹݕ౼͕ඞཁɻ • ࢀরܕͷརΛ׆͔ͤΔ͕ɺ෭࡞༻ͷ͕͍͠ɻ • কདྷͷల • ߏମ͕@ObservableΛαϙʔτ͢ΔՄೳੑɻ
Reference • https://developer.apple.com/documentation/swiftui/state • https://developer.apple.com/documentation/swiftui/observedobject • https://developer.apple.com/documentation/observation • https://developer.apple.com/documentation/swiftui/migrating-from-the- observable-object-protocol-to-the-observable-macro
• https://forums.swift.org/t/second-review-se-0395-observability/65261 • https://github.com/apple/swift-evolution/blob/main/proposals/0395- observability.md