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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
KenShih
March 13, 2025
Programming
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SwiftUIのObservationツールの挙動をテストしてみた
KenShih
March 13, 2025
Other Decks in Programming
See All in Programming
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
0
380
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
270
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
170
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
120
アクセシビリティから考える情報設計
high_g_engineer
0
250
AIの中の人になってみる
htkym
0
170
Oxlintはいいぞ(続)
yug1224
1
550
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
4
2.8k
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
470
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
Deep dive into the select statement (GopherCon UK)
jespino
0
170
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.3k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Typedesign – Prime Four
hannesfritz
42
3.2k
Music & Morning Musume
bryan
47
7.4k
The Curse of the Amulet
leimatthew05
2
14k
Making the Leap to Tech Lead
cromwellryan
135
10k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Bash Introduction
62gerente
615
220k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
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