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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
jambo-develop-team
March 12, 2024
Technology
550
0
Share
SwiftUIのpropertyWrapperをふんわり理解する
jambo-develop-team
March 12, 2024
More Decks by jambo-develop-team
See All by jambo-develop-team
AIに仕事を奪われないために──エンジニアが今すぐ身につけるべき4つの力
jambo_develop_team
0
57
AIツールをフル活用して個人開発をした話
jambo_develop_team
0
37
Claude.mdの育て方
jambo_develop_team
0
45
技術力とAI活用力は違う。市場価値を分ける”苦労のコスパ論
jambo_develop_team
0
39
AIに仕事を奪われないために──エンジニアが今すぐ身につけるべき4つの力
jambo_develop_team
0
56
FigmaMCP+Cursorで直感的にUIを作成してみる🎨
jambo_develop_team
0
150
株式会社ジャンボ_紹介資料
jambo_develop_team
0
16k
StoreKit2を使用した課金実装
jambo_develop_team
0
410
AppDelegateで何をすべきか
jambo_develop_team
0
630
Other Decks in Technology
See All in Technology
最初の一歩を踏み出せなかった私が、誰かの背中を押したいと思うようになるまで / give someone a push
mii3king
0
140
AgentCore RuntimeからS3 Filesをマウントしてみる
har1101
4
440
Digitization部 紹介資料
sansan33
PRO
1
7.3k
AIを共同作業者にして書籍を執筆する方法 / How to Write a Book with AI as a Co-Creator
ama_ch
2
100
明日からドヤれる!超マニアックなAWSセキュリティTips10連発 / 10 Ultra-Niche AWS Security Tips
yuj1osm
0
440
Discordでリモートポケカしてたら、なぜかDOを25分間動かせるようになった話
umireon
0
140
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.2k
Eight Engineering Unit 紹介資料
sansan33
PRO
3
7.2k
Azure Speech で音声対応してみよう
kosmosebi
0
110
Master Dataグループ紹介資料
sansan33
PRO
1
4.6k
サイバーフィジカル社会とは何か / What Is a Cyber-Physical Society?
ks91
PRO
0
190
2026年度新卒技術研修 サイバーエージェントのデータベース 活用事例とパフォーマンス調査入門
cyberagentdevelopers
PRO
8
8.5k
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
110
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
370
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
320
Making Projects Easy
brettharned
120
6.6k
Ethics towards AI in product and experience design
skipperchong
2
250
Facilitating Awesome Meetings
lara
57
6.8k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
200
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
210
[SF Ruby Conf 2025] Rails X
palkan
2
940
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 σʔλΦϒδΣΫτʹ༻͠ɺํͰσʔλΛؔ͢͠Δͱ͖ʹ༻͢Δ ͬ͘͟Γ͜͜Λཧղͯ͠ΒͬͯɺσʔλόΠϯσΟϯά͕؆୯ʹ࣮ՄೳʹͳΔͱ͍͏ ͜ͱΛ͍͚֮͑ͯͨͩΕ͍Ͱ͢ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ