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
プロフィール編集画面の構築 / How to create a profile edit sc...
Search
Masatoshi Kubode
September 20, 2018
Programming
1.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
プロフィール編集画面の構築 / How to create a profile edit screen
Masatoshi Kubode
September 20, 2018
More Decks by Masatoshi Kubode
See All by Masatoshi Kubode
AIチャットの改善から見えた、良いAI体験とは / What Constitutes a Good AI Experience: Insights from Improving AI Chat
kubode
0
170
3リポジトリーを2ヶ月でモノレポ化した話 / How I turned 3 repositories into a monorepo in 2 months
kubode
0
260
ウォンテッドリーの「ココロオドル」モバイル開発 / Wantedly's "kokoro odoru" mobile development
kubode
2
1.4k
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
740
技術を根付かせる / How to make technology take root
kubode
1
510
WantedlyでのKotlin Multiplatformの導入と課題 / Kotlin Multiplatform Implementation and Challenges at Wantedly
kubode
0
660
Google Play Consoleデベロッパー アカウントの確認 / Verifying your Play Console developer account
kubode
1
1.4k
Make your Android app into Multiplatform app
kubode
0
250
ウォンテッドリーにおけるモバイルアプリ開発 / iOSDC Japan 2024 Sponsor Session
kubode
1
1.5k
Other Decks in Programming
See All in Programming
MySQLとPostgreSQLって何が違うの?
akagami
0
120
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
280
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
5
500
バグを直したら useEffect が消えた
colorful12
3
680
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
230
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
230
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
My Marp Sample
sinoue0108
0
110
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
270
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
360
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.3k
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
5.1k
Featured
See All Featured
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Agile that works and the tools we love
rasmusluckow
331
22k
Ruling the World: When Life Gets Gamed
codingconduct
0
310
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
250
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
220
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Transcript
©2018 Wantedly, Inc. ϓϩϑΟʔϧฤूը໘ͷߏங δΣωϦΫεΛͬͨϓϩϑΟʔϧը໘ͷߏங J04%$3FKFDU$POGFSFODF ٱอग़խढ़ 2018/09/18
©2018 Wantedly, Inc. ٱอग़խढ़ 8BOUFEMZͰΛฉ͖ʹߦ͘ମݧΛ࡞Δ8BOUFEMZ7JTJUͷΤϯδχΞͱͯ͠ಇ͍͍ͯ·͢ɻ ϢʔβʔάϩʔεʹϑΥʔΧε͍ͯͯ͠ɺϢʔβʔϢʔβʔମݧΛྑ͘͢ΔͨΊʹʑྗ͍ͯ͠·͢ɻ ओʹϞόΠϧΞϓϦͷ։ൃΛ͍ͯ͠·͢ɻ"OESPJE͕ओͰ͕͢ɺJ04͜͜΄ͲܞΘ͍ͬͯ·͢ɻ !TXJ[@BSE ࣗݾհ
ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc. 8BOUFEMZ7JTJUJ04 ϦχϡʔΞϧ͠·ͨ͠
©2018 Wantedly, Inc. ϓϩϑΟʔϧฤूը໘ΛͲ͏࡞͔ͬͨ ϓϩτίϧ6*ʹδΣωϦΫεΛͬͯ൚༻తʹߏங͢Δ͜ͱͰɺ࣮ίε τΛԼ͛Δ͜ͱ͕Ͱ͖ͨͱ͍͏Λ͠·͢ɻ υϝΠϯʹڧ͘ґଘ͍ͯ͠ΔͷͰɺԠ༻͕͋·Γޮ͘Ͱͳ͍͔͠Ε· ͤΜɻ ࠓ͢͜ͱ
©2018 Wantedly, Inc. J04ΞϓϦϦχϡʔΞϧ
©2018 Wantedly, Inc. ͳͥϦχϡʔΞϧ͔ͨ͠ ҎԼͷΑ͏ͳ՝͕͋ͬͨ w ΞϓϦͰͷΛฉ͖ʹߦ͘·Ͱͷମݧͷվળ w ΦϯϘʔσΟϯάϑϩʔͷվળ w
σβΠϯͷ৽ w ϝϯςφϯείετͷߴ͔ͬͨίʔυͷ৽ ϦχϡʔΞϧͷܦҢ
©2018 Wantedly, Inc. w 4UPSZCPBSEະ༻ • AutoLayoutʹSnapKit • ࠓճͷStoryboardͰ͑ͳ͍߹͋Γ w
3FBDUPS,JU • RxΛͬͨ୯ํσʔλϑϩʔΞʔΩςΫνϟ લఏࣝ
ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc. ͱΓ࣮͋͑ͣͩ
ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc.
©2018 Wantedly, Inc. ฤूը໘ͷ՝
©2018 Wantedly, Inc. ฤूը໘ w ߲͋Δ w Ϧετܥ߲ w Ϧετܥ։ดͰ͖Δ
w ߲͝ͱʹϓϥΠόγʔઃఆΛมߋͰ͖Δ ϓϩϑΟʔϧฤूͷ༷ ϦϯΫΛ։͍ͨঢ়ଶ ͯ͢ดͨ͡ঢ়ଶ
©2018 Wantedly, Inc. ࣅͯΔ͚Ͳத͕ҧ͏7JFX w ը໘શମ6*4UBDL7JFXʹͳ͍ͬͯͯɺࣗݾհ ৬ྺɺֶྺͳͲ߲͕"SSBOHFE4VCWJFXͱ ͯ͠ฒΜͰ͍Δɻ w ͭͭͷ7JFX͕ελΠϧಉ͚ͩ͡Ͳදࣔ͢Δ
༰͕߲ʹΑͬͯҟͳ͍ͬͯΔɻ w λοϓ࣌ʹ։͘ը໘ͯ͢ҟͳΔɻ w ͭͭΧελϜ7JFXΫϥεԽ͢ΔͷϘΠϥʔ ϓϨʔτ͕૿࣮͑ͯίετ͕ߴͦ͏ɻ ՝ ϦϯΫ ࣗݾհ ͖ͳݴ༿ ৬ྺ ֶྺ ελΠϧಉ͚ͩ͡Ͳ த͕શ෦ҧ͏ UIStackView
ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc. δΣωϦΫε͑ͦ͏
©2018 Wantedly, Inc. w ൚༻తʹςΩετͳͲΛઃఆͰ͖Δ7JFXΛ࡞Δ w ΞΠίϯɺλΠτϧɺৄࡉςΩετɺΞΫηαϦΞΠίϯʢӈΞΠίϯʣ w ϦετΛཧ͢Δίϯςφ7JFXΛ࡞Δ w
͜͜ʹδΣωϦΫεΛ͍ɺ֨ೲͰ͖ΔܕΛܾΊΔΑ͏ʹͨ͠ w ։ดͷॲཧ͜ͷ7JFXͰΔ w ։͍͍ͯΔ߹ߴ͞Մมͷ$PMMFDUJPO7JFXΛදࣔ͢Δ ͱͬͨख๏
©2018 Wantedly, Inc. ͱͬͨख๏ ϦετΛཧ͢ΔίϯςφView ProfileEditExpandableItemsView ൚༻తͳView ProfileEditItemView
©2018 Wantedly, Inc. Ϧετܥཧ7JFXଞͷ7JFX
©2018 Wantedly, Inc. Ϧετܥཧ7JFX7JFX֊
©2018 Wantedly, Inc. Ϧετܥཧ7JFXσʔλ͔Β7JFXߋ৽
©2018 Wantedly, Inc. Ϧετܥཧ7JFXσʔλ͔Β$FMMߋ৽ͱίʔϧόοΫ CollectionViewͱCell
©2018 Wantedly, Inc. ฤूը໘ͷ࣮ྫ ৬ྺͷྫ
©2018 Wantedly, Inc. ৬ྺͷ7JFXߋ৽ྫ
©2018 Wantedly, Inc. ৬ྺͷ$BMMCBDLྫ
©2018 Wantedly, Inc. ΞΠςϜฤूը໘ͷ՝
©2018 Wantedly, Inc. ΞΠςϜฤूը໘ w ߲ͦΕͧΕʹը໘ w ϦετܥՃͱฤूϞʔυ͕͋Δ w όϦσʔγϣϯ͕͋Δ
w ը໘͝ͱʹϑΥʔϜ͕ҟͳΔ ϓϩϑΟʔϧฤूͷ༷ ՃϞʔυ ฤूϞʔυ
©2018 Wantedly, Inc. ը໘࡞Βͳ͍ͱ͍͚ͳ͍ w อଘϘλϯɺด͡ΔϘλϯɺอଘதͷΠϯδέʔ λڞ௨ w ฤूϑΥʔϜ߲ʹΑͬͯશ͘ҧ͏ w
όϦσʔγϣϯҧ͏ w ୟ͘ߋ৽"1*ҟͳΔͷ͕͋Δ w Ϧετܥͷͷআ͕Ͱ͖Δ ՝ ֶྺ ৬ྺ
ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc. ڞ௨෦Λ ͦΕҎ֎Λࢠ✕̍̒Ͱ࡞Ζ͏
©2018 Wantedly, Inc. w ڞ௨෦ w 7JFX$POUSPMMFSͰ7JFXͱঢ়ଶͷཧ w ࢠͷঢ়ଶΛ0CTFSWFͯ͠อଘϘλϯͷঢ়ଶมߋͳͲ͢Δ w
อଘ"1*ίʔϧࢠͷΠϯλʔϑΣʔεΛݺΜͰࢠͷํͰߦ͏ w ϑΥʔϜόϦσʔγϣϯࢠ w όϦσʔγϣϯͳͲͷೖྗঢ়ଶཧࢠͰߦ͏ w ࢠͷQSPUPDPMʹ४ڌͤ͞Δ ͱͬͨख๏ ࢠ✕̍̒
©2018 Wantedly, Inc. 7JFX$POUSPMMFSͱ3FBDUPS w DMBTT1SPpMF*UFN&EJU7JFX$POUSPMMFS7JFX$POUSPMMFS*UFN&EJU7JFX$POUSPMMFS w DMBTT1SPpMF*UFN&EJU3FBDUPS*UFN3FBDUPS*UFN&EJU3FBDUPS
ࢠ7JFX$POUSPMMFSͱ3FBDUPS w QSPUPDPM*UFN&EJU7JFX$POUSPMMFS7JFXXIFSF3FBDUPS*UFN&EJU3FBDUPS w QSPUPDPM*UFN&EJU3FBDUPS3FBDUPSXIFSF4UBUF*UFN&EJU3FBDUPS4UBUF w QSPUPDPM*UFN&EJU3FBDUPS4UBUF&EJUBCMF ܕͷఆٛ
©2018 Wantedly, Inc. ✕ ࢀরͱδΣωϦΫε ࢀর Observable <Type> δΣωϦΫεͷܕ 3FBDUPS
ࢠ3FBDUPS 7JFX$POUSPMMFS ࢠ7JFX$POUSPMMFS ࢠ3FBDUPS ࢠ7JFX$POUSPMMFS &EJUBCMF
©2018 Wantedly, Inc. Editable
©2018 Wantedly, Inc. Editable - ྫ Entityͷఆ͔ٛΒ SourceryͰEditableΛੜ͍ͯ͠Δ
©2018 Wantedly, Inc. ࢠReactorͱStateͷprotocol
©2018 Wantedly, Inc. Reactor
©2018 Wantedly, Inc. Reactor - ࢠͷ࿈ܞ submit updateSingle state (button.isEnabled)
state (Valid, Changed)
©2018 Wantedly, Inc. ViewController - Viewߏ
©2018 Wantedly, Inc. ViewController - Reactorͷbind action update views
©2018 Wantedly, Inc. ߲ฤूը໘ͷ࣮ྫ ৬ྺͷྫ
©2018 Wantedly, Inc. ৬ྺͷྫ - ࢠReactor ςΩετߋ৽࣌ʹ ͜ͷAction͕͛ΒΕΔ
©2018 Wantedly, Inc. ৬ྺͷྫ - ࢠReactorͷߋ৽APIݺͼग़͠ submit updateSingle
©2018 Wantedly, Inc. ৬ྺͷྫ - ViewController όϦσʔγϣϯΤϥʔͷදࣔ
©2018 Wantedly, Inc. ·ͱΊ
©2018 Wantedly, Inc. w 6*ʹδΣωϦΫεར༻Ͱ͖Δ w ֎ಉ͚ͩ͡Ͳத$FMM͕ҧ͏ύλʔϯͳͲͰ༗ޮ w ৼΔ͍ΛϓϩτίϧΫϩʔδϟͰҕৡ͢Δ w
ΠϕϯτίʔϧόοΫ࣌ʹܕ҆શʹΦϒδΣΫτΛॲཧͰ͖Δ w ͞ΒͳΔվળ w 6*Ͱͳ͘ΦϒδΣΫτʹ1SPUPDPMΛద༻͢Δ͜ͱͰࣅͨΑ͏ͳ࣮Մೳ w ͏গ͠நԽͰ͖͔ͨ w 4UPSZCPBSEͰδΣωϦΫε͕͑ͳ͍ͷͰΧελϜ7JFXʴ1SPUPDPMͷ΄͏͕ॊೈ͔ ·ͱΊ
ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc.