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
260
SwiftUIのpropertyWrapperをふんわり理解する
jambo-develop-team
March 12, 2024
Tweet
Share
More Decks by jambo-develop-team
See All by jambo-develop-team
会社紹介資料_株式会社ジャンボ
jambo_develop_team
0
520
株式会社Jambo紹介資料
jambo_develop_team
0
630
StoreKit2を使用した課金実装
jambo_develop_team
0
180
AppDelegateで何をすべきか
jambo_develop_team
0
220
JetpackCompose触ってみた
jambo_develop_team
0
6
KMPを触ってみた
jambo_develop_team
0
13
モバイルアプリの通知機能を AmazonSNSで実装する
jambo_develop_team
0
18
アジャイル入門
jambo_develop_team
0
8
0から始めるSwiftData
jambo_develop_team
0
9
Other Decks in Technology
See All in Technology
JEP 480: Structured Concurrency
aya_ebata
0
130
自作Cコンパイラ 8時間の奮闘
soukouki
0
830
Technical Writing Meetup vol.35
soracom
PRO
2
110
フルカイテン株式会社 採用資料
fullkaiten
0
32k
Agile in Automotive Industry, puzzles and lights.
hiranabe
3
1.3k
DroidKaigi 2024 たすけて!ViewModel
mhidaka
5
880
エンジニア視点で見る、 組織で運用されるデザインシステムにするには
shunya078
1
300
LLVM/ASMを使った有限体の高速実装
herumi
0
120
ついに出た!OpenAIの最新モデル「o1」って何がすごいの?
minorun365
PRO
3
750
効果的なオンコール対応と障害対応
ryuichi1208
5
2.9k
『GRANBLUE FANTASY: Relink』最高の「没入感」を実現するカットシーン制作手法とそれを支える技術
cygames
0
110
Tricentisにおけるテスト自動化へのAI活用ご紹介/20240910Shunsuke Katakura
shift_evolve
0
180
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
425
64k
How to Think Like a Performance Engineer
csswizardry
16
960
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
0
97
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
Creatively Recalculating Your Daily Design Routine
revolveconf
215
12k
How GitHub (no longer) Works
holman
310
140k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
663
120k
A designer walks into a library…
pauljervisheath
201
24k
A Modern Web Designer's Workflow
chriscoyier
691
190k
Designing Experiences People Love
moore
138
23k
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 σʔλΦϒδΣΫτʹ༻͠ɺํͰσʔλΛؔ͢͠Δͱ͖ʹ༻͢Δ ͬ͘͟Γ͜͜Λཧղͯ͠ΒͬͯɺσʔλόΠϯσΟϯά͕؆୯ʹ࣮ՄೳʹͳΔͱ͍͏ ͜ͱΛ͍͚֮͑ͯͨͩΕ͍Ͱ͢ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ