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のpropertyWrapperをふんわり理解する
Search
jambo-develop-team
March 12, 2024
Technology
0
470
SwiftUIのpropertyWrapperをふんわり理解する
jambo-develop-team
March 12, 2024
Tweet
Share
More Decks by jambo-develop-team
See All by jambo-develop-team
FigmaMCP+Cursorで直感的にUIを作成してみる🎨
jambo_develop_team
0
66
株式会社ジャンボ_紹介資料
jambo_develop_team
0
1.8k
StoreKit2を使用した課金実装
jambo_develop_team
0
350
AppDelegateで何をすべきか
jambo_develop_team
0
510
JetpackCompose触ってみた
jambo_develop_team
0
24
KMPを触ってみた
jambo_develop_team
0
20
モバイルアプリの通知機能を AmazonSNSで実装する
jambo_develop_team
0
37
アジャイル入門
jambo_develop_team
0
15
0から始めるSwiftData
jambo_develop_team
0
13
Other Decks in Technology
See All in Technology
会社を支える Pythonという言語戦略 ~なぜPythonを主要言語にしているのか?~
curekoshimizu
1
320
AWSでAgentic AIを開発するための前提知識の整理
nasuvitz
2
250
[OCI Skill Mapping] AWSユーザーのためのOCI – IaaS編(Compute/Storage/Networking) (2025年10月8日開催)
oracle4engineer
PRO
1
170
Kubernetes self-healing of your workload
hwchiu
0
330
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
Introduction to Bill One Development Engineer
sansan33
PRO
0
300
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.8k
Claude Code Subagents 再入門 ~cc-sddの実装で学んだこと~
gotalab555
10
17k
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
20k
Claude Codeを駆使した初めてのiOSアプリ開発 ~ゼロから3週間でグローバルハッカソンで入賞するまで~
oikon48
10
5.3k
「魔法少女まどか☆マギカ Magia Exedra」のIPのキャラクターを描くための3Dルック開発
gree_tech
PRO
0
140
CoRL 2025 Survey
harukiabe
1
240
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Context Engineering - Making Every Token Count
addyosmani
7
280
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
The Cost Of JavaScript in 2023
addyosmani
55
9.1k
Optimizing for Happiness
mojombo
379
70k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Navigating Team Friction
lara
190
15k
The Pragmatic Product Professional
lauravandoore
36
7k
Transcript
PROPERTY WRAPPER SwiftUIͷproperty wrapperͷ֓ཁΛ;ΜΘΓཧղ͢Δ
ɾνʔϜ͕ྲྀಈతʹมԽͯ͠ɺٕज़తʹ֤νʔϜʹೃછΈ͘͢͢ΔͨΊ ࣮ࢪ͢Δత ɾੵۃతʹٕज़ΛΩϟονΞοϓ͢Δ͜ͱͰϞόΠϧΤϯδχΞશମͷٕज़ͷఈ্͛Λ͢ΔͨΊ ɾqiitaΛ༻͍ͨ֎෦ͷൃ৴Λߦ͏͜ͱͰใʹ৮ΕͨਓʹδϟϯϘͷΤϯδχΞͱͯ͠ಇ ͘͜ͱʹڵຯΛ࣋ͬͯΒ͏Α͏ʹ͢Δ
PROPERTY WRAPPER ϓϩύςΟʔϥούʔͱɺϓϩύςΟʔʹରͯ͠ಛఆͷৼΔ͍ ػೳΛఏڙͯ͘͠ΕΔͷ ϓϩύςΟʔϥούʔͱ…
ಛఆͷৼΔ͍ػೳͱ͍͏ͷओʹϓϩύςΟʔͷঢ়ଶཧΛߦ͍·͢ ϓϩύςΟʔͷঢ়ଶཧɹɹΛࢹ͠ɺมߋ͕ͬͨͱ͖ʹࣗಈͰߋ৽͢Δ͜ͱɺ͢ͳΘͪ※σʔλόΠϯσΟϯά PropertyWrapper͕͑Δͱ͍͏ͷσʔλόΠϯσΟϯά͕Ͱ͖ΔΑ͏ʹͳΔ ࠓճઆ໌͢Δ4XJGU6*ͷQSPQFSUZ8SBQQFS @state @Binding ObservableObject @StateObject ※σʔλͱରΛ݁ͼ͚ͭɺσʔλ͋Δ͍ରͷมߋΛ҉ࣔతʹ͏Ұํͷมߋө͢Δ͜ͱ
σʔλόΠϯσΟϯάͰ͖ΔͱԿ͕͏Ε͍͠Ͱ͠ΐ͏͔? গ͠ઢ͠·͢
࣭Ͱ͢ɻ ීஈAPIΛݺΜͰؼ͖ͬͯͨϨεϙϯεΛͲͷΑ͏ʹViewPresenterʹ͍ͯ͠·͔͢?? 1ɼΫϩʔδϟʔΛ༻͍Δ →ɹMuseνʔϜͷΞϓϦ݁ߏ͜Εͩͱࢥ͍·͢ʂ 2ɼasync/awaitΛ༻͍Δ →ɹFocaͰ݁ߏΑ͘ݟ·͢ʂ
ShionͷsignInPresenterͷ৽نొॲཧͰ͢ɻ(৽نొϘλϯԡԼޙʹൃՐ͠·͢) Ϋϩʔδϟʔͷωετ͕͔ͳΓਂ͘ͳ͍ͬͯͯಡΈͮΒ͍Ͱ͢
มʹΞΫηε͢Δ͚ͩͰ࠷৽ͷใΛऔಘͯ͠Viewͷߋ ৽·ͰͰ͖ͨΒศརͰͳ͍Ͱ͠ΐ͏͔?? SwiftUIͷpropertyWrapper͑˞؆୯ʹ࣮ೳͰ͢ʂ ※ݫີʹɺUIKitͰRXSwiftͳͲͷϥΠϒϥϦΛ͑ՄೳͰ͢ʂ͔͠͠SwiftUIͰඪ४උͰ͢ʂ
Λ͠·͢ʂ
֤छpropertyWrapperΛઆ໌͍͖ͯ͠·͢ʂ ਖ਼গ͠ͱ͖ͬͭʹ͍͘༰͔ͱࢥ͍·͢ͷͰɺ؆୯ʹઆ໌Ͱ͖ͨΒ͍͍ͳͱࢥ͍·͢ʂ ͢͜ͱ ɾ֤छϓϩύςΟʔϥούʔͷಛ ɾϓϩύςΟʔϥούʔ֤छͷجຊతͳ༻ํ๏ ɾσʔλόΠϯσΟϯάΛ͢Δͱ͖ͷྲྀΕ ͞ͳ͍͜ͱ ɾCombineʹ͍ͭͯ ɾϥΠϒίʔσΟϯάͰઆ໌(Γ͔ͨͬͨΜͰ͚͢Ͳࣗͷٕज़ྗతʹ·ͩݫ͔ͬͨ͠Ͱ͢স)
ˏ4UBUF σʔλ͕ܕͰɺσʔλΛߋ৽Λ͠ɺσʔλͷൃੜݯ͕Viewࣗͷ߹@State͕͑· ͢ɻ ؆୯ʹݴ͏ͱViewͷதͰΛมߋ͢Δܕͷมʹ͑ΔΑʂ
@Binding ܕͷσʔλͰɺσʔλΛߋ৽͠·͕͢ɺσʔλͷൃੜݯViewͳͲ֎͔Β͞ΕΔ ߹@Binding͕͑·͢ɻ ؆୯ʹݴ͏ͱσʔλ͕֎͔Β͞Ε ͍ͯͯܕ͔ͩΒ@Binding͕͑ Δʂ
͍ํ ํͰঢ়ଶཧΛߦ͍͍ͨʂͳ@Stateͱ@BindingΛηοτͰ༻͢Δ
ࠓհͨ̎ͭ͠ܕͷQSPQFSUZ8SBQQFSͰ͢ σʔλΦϒδΣΫτΛѻ͏ͷ༻ҙ͞Ε͍ͯ·͢ʂ σʔλΦϒδΣΫτͱʁ JamboͰ͍͏ͱ͜ΖͷTimeLineEntityͱ͔?
ObservableObject ͜ΕΒͷσʔλΦϒδΣΫτΛ4XJGU6*͕ࢹͰ͖ΔΑ͏ʹ͢Δʹ 0CTFSWBCMF0CKFDUϓϩτίϧʹ४ڌ͢Δඞཁ͕͋Γ·͢ɻ σʔλΦϒδΣΫτΛࢹ͍ͨ͠߹ɺ0CTFSWBCMF0CKFDUΛ४ڌ͞ ͤͯࢹରʹˏ1VCMJTIFEΛ͚ͭΔ
@StateObject ObservableObjectΛ४ڌͨ͠ClassΛΠϯελϯεԽ͢Δͱ͖ʹ@StateObjectΛ͚ͭΔ incrementCount()Ͱ@PublishedͷcountͷΛߋ৽͍ͯ͠·͢ @StateObjectͰdataSourceͷˏPublishedͷΛࢹ͍ͯ͠ΔͷͰ… dataSource.CounterͷΞΫηεͰߋ৽͞ΕͨσʔλΛViewʹ ө͢Δ͜ͱ͕Ͱ͖·͢ɻ observableObjectΛ४ڌͨ͠DateSourceΛ@stateObjectΛ͚ͭ ͯΠϯελϯεԽ͠·͢ʂ ButtonΛԡԼͨ͠ͱ͖ʹdateSourceͷincrementCount()ΛݺΜͰ…
·ͱΊ @state @Binding ܕʹ༻͠ɺํͰσʔλΛؔ͢͠Δͱ͖ʹ༻͢Δ ObservableObject @StateObject σʔλΦϒδΣΫτʹ༻͠ɺํͰσʔλΛؔ͢͠Δͱ͖ʹ༻͢Δ ͬ͘͟Γ͜͜Λཧղͯ͠ΒͬͯɺσʔλόΠϯσΟϯά͕؆୯ʹ࣮ՄೳʹͳΔͱ͍͏ ͜ͱΛ͍͚֮͑ͯͨͩΕ͍Ͱ͢ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ