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
180
SwiftUIのObservationツールの挙動をテストしてみた
KenShih
March 13, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
Cursorハンズオン実践!
eltociear
2
1.2k
Software Architecture
hschwentner
6
2.3k
Flutterで分数(Fraction)を表示する方法
koukimiura
0
140
ソフトウェア設計の実践的な考え方
masuda220
PRO
4
640
Six and a half ridiculous things to do with Quarkus
hollycummins
0
210
CSC305 Lecture 08
javiergs
PRO
0
280
コード生成なしでモック処理を実現!ovechkin-dm/mockioで学ぶメタプログラミング
qualiarts
0
260
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
320
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
240
『毎日の移動』を支えるGoバックエンド内製開発
yutautsugi
2
280
bootcamp2025_バックエンド研修_WebAPIサーバ作成.pdf
geniee_inc
0
120
Devoxx BE - Local Development in the AI Era
kdubois
0
140
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
Context Engineering - Making Every Token Count
addyosmani
8
300
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
990
RailsConf 2023
tenderlove
30
1.3k
The Pragmatic Product Professional
lauravandoore
36
7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Designing for humans not robots
tammielis
254
26k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
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