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
140
SwiftUIのObservationツールの挙動をテストしてみた
KenShih
March 13, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
状態と共に暮らす:ステートフルへの挑戦
ypresto
3
1.1k
設計の本質:コード、システム、そして組織へ / The Essence of Design: To Code, Systems, and Organizations
nrslib
10
3.7k
ASP.NETアプリケーションのモダナイゼーションについて
tomokusaba
0
240
AIコーディングの理想と現実
tomohisa
35
37k
Making TCPSocket.new "Happy"!
coe401_
1
2.9k
Orleans + Sekiban + SignalR でリアルタイムWeb作ってみた
tomohisa
0
220
Flutterでllama.cppをつかってローカルLLMを試してみた
sakuraidayo
0
120
Golangci-lint v2爆誕: 君たちはどうすべきか
logica0419
1
230
M5UnitUnified 最新動向 2025/05
gob
0
120
SwiftDataのカスタムデータストアを試してみた
1mash0
0
140
DevOpsDaysTokyo2025社内副業で他部門へ_越境_して見えた価値再定義最大1か月のリードタイムを10分に短縮したDevOps実践.pdf
susumutomita
0
110
2ヶ月で生産性2倍、お買い物アプリ「カウシェ」4チーム同時改善の取り組み
ike002jp
1
110
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
590
How to train your dragon (web standard)
notwaldorf
91
6k
A better future with KSS
kneath
239
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.4k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.2k
Become a Pro
speakerdeck
PRO
28
5.3k
Six Lessons from altMBA
skipperchong
28
3.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Agile that works and the tools we love
rasmusluckow
329
21k
Facilitating Awesome Meetings
lara
54
6.3k
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