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
200
SwiftUIのObservationツールの挙動をテストしてみた
KenShih
March 13, 2025
Tweet
Share
Other Decks in Programming
See All in Programming
「やめとこ」がなくなった — 1月にZennを始めて22本書いた AI共創開発のリアル
atani14
0
360
文字コードの話
qnighy
44
17k
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
15
8.2k
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
260
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
330
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
200
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
120
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
490
2026/02/04 AIキャラクター人格の実装論 口 調の模倣から、コンテキスト制御による 『思想』と『行動』の創発へ
sr2mg4
0
720
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.5k
AI時代のソフトウェア開発でも「人が仕様を書く」から始めよう-医療IT現場での実践とこれから
koukimiura
0
140
株式会社 Sun terras カンパニーデック
sunterras
0
2k
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
5.8k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
190
[SF Ruby Conf 2025] Rails X
palkan
2
820
30 Presentation Tips
portentint
PRO
1
250
The Language of Interfaces
destraynor
162
26k
Ruling the World: When Life Gets Gamed
codingconduct
0
160
Why Our Code Smells
bkeepers
PRO
340
58k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
230
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Technical Leadership for Architectural Decision Making
baasie
3
280
Side Projects
sachag
455
43k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
820
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