Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
プロフィール編集画面の構築 / How to create a profile edit sc...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
230
3リポジトリーを2ヶ月でモノレポ化した話 / How I turned 3 repositories into a monorepo in 2 months
kubode
0
310
ウォンテッドリーの「ココロオドル」モバイル開発 / Wantedly's "kokoro odoru" mobile development
kubode
2
1.4k
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
780
技術を根付かせる / How to make technology take root
kubode
1
540
WantedlyでのKotlin Multiplatformの導入と課題 / Kotlin Multiplatform Implementation and Challenges at Wantedly
kubode
0
700
Google Play Consoleデベロッパー アカウントの確認 / Verifying your Play Console developer account
kubode
1
1.5k
Make your Android app into Multiplatform app
kubode
0
270
ウォンテッドリーにおけるモバイルアプリ開発 / iOSDC Japan 2024 Sponsor Session
kubode
1
1.6k
Other Decks in Programming
See All in Programming
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
410
phperだってパンチカードでコーディングしたい
o0h
PRO
0
330
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
ジョジョの世界をXRで再現する
mofurune
0
160
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
790
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
SREの越境 / SRE Collaboration
y0hgi
2
310
最近”作らせてる” ローカルAIアプリの話
akit37
0
470
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
Automating Front-end Workflow
addyosmani
1369
210k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Scaling GitHub
holman
464
140k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Tell your own story through comics
letsgokoyo
1
1.1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Building AI with AI
inesmontani
PRO
1
1.3k
Accessibility Awareness
sabderemane
1
250
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.