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
560
0
Share
SwiftUIのpropertyWrapperをふんわり理解する
jambo-develop-team
March 12, 2024
More Decks by jambo-develop-team
See All by jambo-develop-team
株式会社ジャンボ_紹介資料
jambo_develop_team
0
5
AIに仕事を奪われないために──エンジニアが今すぐ身につけるべき4つの力
jambo_develop_team
0
62
AIツールをフル活用して個人開発をした話
jambo_develop_team
0
46
Claude.mdの育て方
jambo_develop_team
0
48
技術力とAI活用力は違う。市場価値を分ける”苦労のコスパ論
jambo_develop_team
0
47
AIに仕事を奪われないために──エンジニアが今すぐ身につけるべき4つの力
jambo_develop_team
0
66
FigmaMCP+Cursorで直感的にUIを作成してみる🎨
jambo_develop_team
0
170
StoreKit2を使用した課金実装
jambo_develop_team
0
420
AppDelegateで何をすべきか
jambo_develop_team
0
660
Other Decks in Technology
See All in Technology
long-running-tasks
cipepser
3
460
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
170
OpenID Connectによるサービス間連携
takesection
0
150
実装は速くなった、レビューはどうする? ― 自身のレビューをAIで再現させるサーヴァントエンジニアリングのすゝめ / Implementation got faster. So what about reviews? — An invitation to Servant Engineering: Recreating your own code reviews with AI
nrslib
2
1.1k
個人の発見を、組織の知恵に 〜生成AI活用を"探索"から"組織の仕組み"へ〜
kintotechdev
2
480
Generative UI × A2UI で AI エージェントを作った話 AI-DLC も使ってみた!
kmiya84377
1
310
さきさん文庫の書籍ができるまで
sakiengineer
0
330
速さだけじゃない! VoidZero ツールが移行先に選ばれる理由
mizdra
PRO
6
730
運用を見据えたAIエージェント設計実践
amacbee
0
1.5k
Spring AI × MCP 入門〜AIエージェントへのツール公開、境界設計から始める最小構成 〜
yuyamiyamoto
0
200
Java正規表現エンジン(NFA)の仕組みと パフォーマンスを維持するための最適化手法
takeuchi_132917
0
170
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development
yoshidashingo
1
300
Featured
See All Featured
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
410
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.6k
Code Review Best Practice
trishagee
74
20k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
The Cost Of JavaScript in 2023
addyosmani
55
10k
The Curious Case for Waylosing
cassininazir
1
370
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Done Done
chrislema
186
16k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
470
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
200
ラッコキーワード サービス紹介資料
rakko
1
3.5M
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 σʔλΦϒδΣΫτʹ༻͠ɺํͰσʔλΛؔ͢͠Δͱ͖ʹ༻͢Δ ͬ͘͟Γ͜͜Λཧղͯ͠ΒͬͯɺσʔλόΠϯσΟϯά͕؆୯ʹ࣮ՄೳʹͳΔͱ͍͏ ͜ͱΛ͍͚֮͑ͯͨͩΕ͍Ͱ͢ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ