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
570
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SwiftUIのpropertyWrapperをふんわり理解する
jambo-develop-team
March 12, 2024
More Decks by jambo-develop-team
See All by jambo-develop-team
株式会社ジャンボ_紹介資料
jambo_develop_team
0
15
AIに仕事を奪われないために──エンジニアが今すぐ身につけるべき4つの力
jambo_develop_team
0
70
AIツールをフル活用して個人開発をした話
jambo_develop_team
0
50
Claude.mdの育て方
jambo_develop_team
0
53
技術力とAI活用力は違う。市場価値を分ける”苦労のコスパ論
jambo_develop_team
0
51
AIに仕事を奪われないために──エンジニアが今すぐ身につけるべき4つの力
jambo_develop_team
0
71
FigmaMCP+Cursorで直感的にUIを作成してみる🎨
jambo_develop_team
0
190
StoreKit2を使用した課金実装
jambo_develop_team
0
430
AppDelegateで何をすべきか
jambo_develop_team
0
680
Other Decks in Technology
See All in Technology
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
270
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.8k
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
3
4.1k
AI時代の闇と光
tatsuya1970
0
100
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
350
事業価値を⽣み出すSREへ SREが担うべき意思決定の5層
kenta_hi
2
3.9k
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
170
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
860
CIで使うClaude
iwatatomoya
0
290
DatabricksにおけるMCPソリューション
taka_aki
1
270
アカウントが増えてからでは遅い? ~ マルチアカウント統制の勘所 ~
kenichinakamura
0
250
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
290
Featured
See All Featured
Docker and Python
trallard
47
4k
Evolving SEO for Evolving Search Engines
ryanjones
0
240
Agile that works and the tools we love
rasmusluckow
331
22k
Rails Girls Zürich Keynote
gr2m
96
14k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Building Applications with DynamoDB
mza
96
7.1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
Building the Perfect Custom Keyboard
takai
2
810
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 σʔλΦϒδΣΫτʹ༻͠ɺํͰσʔλΛؔ͢͠Δͱ͖ʹ༻͢Δ ͬ͘͟Γ͜͜Λཧղͯ͠ΒͬͯɺσʔλόΠϯσΟϯά͕؆୯ʹ࣮ՄೳʹͳΔͱ͍͏ ͜ͱΛ͍͚֮͑ͯͨͩΕ͍Ͱ͢ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ