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
ゆるやかなReactiveCocoaの導入
Search
ninjinkun
August 03, 2014
Programming
8
4.7k
ゆるやかなReactiveCocoaの導入
Fablic社でのReactiveCocoaの(ゆるい)導入事例
ninjinkun
August 03, 2014
Tweet
Share
More Decks by ninjinkun
See All by ninjinkun
買収から2ヶ月でシステム統合した話
ninjinkun
0
36
Designer's and Engineer's Thinking Styles
ninjinkun
0
110
Launchable Webinar テストを効率化して生産性を上げる方法
ninjinkun
2
500
ディープリンクの 設計と実装 - iOSDC2017
ninjinkun
18
9.8k
スマートフォンアプリ開発における共創的な開発チーム
ninjinkun
61
18k
ReSwiftでアプリの状態管理 / Reactive Swift Meetup
ninjinkun
9
16k
フリルのアプリ開発今昔物語
ninjinkun
3
2.1k
プロトタイピング合宿によるデザインリニューアル
ninjinkun
1
3k
デザイナーが仕事をしやすいアプリエンジニアを考える
ninjinkun
4
620
Other Decks in Programming
See All in Programming
画像でわかる北島直樹
naoki0917
0
110
Folding Cheat Sheet #8
philipschwarz
PRO
0
140
2024-10-02 dev2next - Application Observability like you've never heard before
jonatan_ivanov
0
200
perl for shell, awk and sed programmers
mackee
2
1k
CSC509 Lecture 04
javiergs
PRO
0
170
個人開発で使ってるやつを紹介する回
yohfee
1
730
文化が生産性を作る
jimpei
3
630
How to debug Xdebug... or any other weird bug in PHP
dunglas
2
1.5k
The future of development – Are our jobs getting harder or easier?
hollycummins
1
210
Re:proS_案内資料
rect
0
170
Програмиране с Rust, ФМИ, 2024
nikolads
0
120
Competitionsだけじゃない! Kaggle Notebooks Grandmasterのすすめ
corochann
2
940
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
296
20k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Happy Clients
brianwarren
97
6.7k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
7.6k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
41
9.2k
Teambox: Starting and Learning
jrom
132
8.7k
Practical Orchestrator
shlominoach
186
10k
What's new in Ruby 2.0
geeforr
342
31k
Building an army of robots
kneath
302
42k
Building Applications with DynamoDB
mza
90
6k
Transcript
ΏΔ͔ͳ 3FBDUJWF$PDPBͷಋೖ OJOKJOLVO
ΞδΣϯμ w ͳͥࠓ3FBDUJWF$PDPB 3"$ ͔ w 3FBDUJWF$PDPBͷஈ֊తͳ࠾༻ w .77.ͷ؇͔ͳҠߦ
ҙ w ษڧ͠ͳ͕Βࢿྉ࡞͍ͬͯ·͢ w ݴ༿ͷఆ͍ٛํ͕ਖ਼͘͠ͳ͍Մೳੑ͕͋Γ·͢
ͳͥࠓ3FBDUJWF$PDPB͔ w ΞϓϦͷෳࡶԽ w 8FCαʔϏε࿈ܞΞϓϦͷ૿Ճ w ඇಉظॲཧͷଟ༻
ͳͥࠓ3FBDUJWF$PDPB͔ w ΞϓϦ͕ඇৗʹଟ͘ͷzঢ়ଶzͱzඇಉظॲཧzΛ࣋ͬ ͍ͯΔ w ଟͷ"1*ͱඇಉظʹ௨৴͠ɺঢ়ଶΛదʹߋ৽ ͠ɺϢʔβʔʹදࣔ͢Δ
ͳͥࠓ3FBDUJWF$PDPB͔ w 'SJMͷ-JLF "1*ίʔϧ Ϟσϧͷ-JLF ὑΞΠίϯస ͍͍Ͷͷߋ৽ -JLFͷߋ৽Λ௨ $FMMΛϦϩʔυ
.PEFMΛͯ͠ ৄࡉϏϡʔΛදࣔ ˞σʔλ։ൃػͷͷͰ͢
ͳͥࠓ3FBDUJWF$PDPB͔
ͳͥࠓ3FBDUJWF$PDPB͔ w .PEFMͷߋ৽ɺ௨ɺ7JFXͷߋ৽ w EFMFHBUFϝιουPS/4/PUJpDBUJPO$FOUFS w ίϝϯτɺϢʔβʔͷϑΥϩʔͳͲಉ͡ w खͰঢ়ଶΛಉظ͢ΔϝιουΛॻ͖ଓ͚ΔͷʹݶքΛײ͡Δ w
ΈΜͳ͕ΜͬͯͬͯΔ͚Ͳ w ঢ়ଶͷཧͱඇಉظॲཧΛநԽ͍ͨ͠
ؔܕϦΞΫςΟϒϓϩάϥϛϯά '31 w l'31JTQSPHSBNNJOHXJUIBTZODISPOPVTEBUB TUSFBNTz w 4USFBN w ϢʔβʔͷΫϦοΫ 5XJUUFSͷGFFE
FUDʜ
ؔܕϦΞΫςΟϒϓϩάϥϛϯά '31 w ؔܕݴޠͷύϥμΠϜ͔Β༝དྷ w .JDSPTPGU͕/FUͰ(6*ք۾ʹΊͨ w ༷ʑͳ࣮͕͋Δ w 3FBDUJWF
(SBQFGSVJU :BNQB BLLB w 3Y&YUFOUJPOT 3"$ 3Y+BWB 3Y+4 SFBDU
'31ͷಛ w 5IF3FBDUJWF.BOJGFTUPΑΓ w &WFOU%SJWFOΠϕϯτۦಈ w 4DBMBCMF֦ுੑ w 3FTJMJFOUোͷੑ w
3FTQPOTJWFԠੑ
'31ͷ༻్ w αʔόʔͰΫϥΠΞϯτͰ͑Δ֓೦ w ͕ࣗࢥ͍ͭ͘'31ͷ༻్ w αʔόʔ w νϟοτɺಈը৴ɺΦϯϥΠϯήʔϜͳͲԠੑ͕ٻ ΊΒΕΔͷ
w ΫϥΠΞϯτ w 4/4ɺνϟοτͳͲ"1*Λଟίʔϧ͢ΔΞϓϦɺήʔϜ
εϚϑΥΞϓϦΠϕϯτͩΒ͚ w (6*ͷΠϕϯτ w λοϓɺδΣενϟ w ϋʔυΣΞͷΠϕϯτ w (14ใɺϞʔγϣϯ w
௨৴ͷΠϕϯτ w "1*ίʔϧͱϨεϙϯεड৴ɺΤϥʔॲཧ
εϚϑΥΞϓϦͱ'31 w ΞϓϦ͕ංେԽͯ͘͠ΔͱΠϕϯτͩΒ͚ʹͳΔ w ಛʹ8FCαʔϏεͷΫϥΠΞϯτͰݦஶ w 8FCαʔϏε֤͕ࣾ'31Λར༻࢝͠Ί͍ͯΔ w (JUIVC /FUqJY
αʔόʔ 'BDFCPPL +4 w $IBUXPSL 'SFFF 'BCMJD *ODSFNFOUT
3"$ͷஈ֊తͳ࠾༻
'BCMJDͷ3"$ར༻ϙϦγʔ w 3"$ʹϩοΫΠϯ͞ΕΔΑ͏ͳ࣮ආ͚Δ w 3"$ΦϒδΣΫτΛϞδϡʔϧؒͷΠϯλʔϑΣ Πεʹ༻͠ͳ͍ w ·ͩͪΌΜͱ3"$ΛཧղͰ͖͍ͯͳ͍ͷͰʜ
3FBDUJWF$PDPBͷஈ֊తͳ࠾༻ w 'BCMJDͰͷ3"$ͷ༻్ w ςΩετͷ7BMJEBUJPO w %FMFHBUFϥούʔ w ,70ϥούʔ w
.77.ͷͱ͜ΖͰޙड़
ςΩετͷ7BMJEBUJPO w όϦσʔγϣϯͯ͠ϘλϯΛFOBCMFʹ͢Δ w 3"$ͷ3&"%.&ʹྫ͕͋ΔͷͰͱΓ͋͑ͣಋೖ ͢Δʹ͏͚ͬͯͭ w ྫ͑͜ΕۜߦͷࢧళΛೖྗͤ͞Δίʔυ RAC(self.navigationItem.rightBarButtonItem, enabled)
= [_branchCodeTextField.rac_textSignal map:^id(NSString *text) { return @(text && [ValidatioUtil isValidBranchCode:text]); }];
EFMFHBUFϥούʔ w EFMFHBUFϝιουΛΘͣʹͦͷͰCMPDLΛͤ Δ w #MPDLT,JUͱಉ͡༻్ UIAlertView *alertView = [[UIAlertView
alloc] initWith…]; [[alertView rac_buttonClickedSignal] subscribeNext:^(NSNumber *buttonIndex) { switch ([buttonIndex integerValue]) { case 1: do some thing… break; case 2: do something … break; default: break; } }]; [alertView show];
.77.ͷ ؇͔ͳҠߦ
.77.ͱ w .PEFM7JFX7JFX.PEFM w 7JFX.PEFM w 7JFXΛඳը͢ΔͨΊͷঢ়ଶอ࣋ w 7JFXΠϕϯτͷ݁ՌΛ.PEFMୡ 7JFX
7JFX.PEFM .PEFM
3"$Ͱ.77. w 7JFX7JFX.PEFMؒΛCJOEJOH w 7JFX.PEFMͷߋ৽ࣗಈతʹ7JFXʹө 7JFX 7JFX.PEFM .PEFM 6*7JFX 6*7JFX$POUSPMMFS
3"$ͰCJOEJOH RAC(self.detailMessageLabel, text) = [RACObserve(self, detailMessage) filter:^BOOL(NSString *message) { return message.length; }];
ͳͥ.77.͕ඞཁ͔ w -JLFͷྫ 7JFX.PEFMͷ -JLF 7JFX.PEFMͷߋ৽Λݕ ࣗಈతʹ$FMMΛߋ৽ 7JFX.PEFMΛ ͯ͠ৄࡉϏϡʔΛදࣔ
ͳͥ.77.͕ඞཁ͔ w 4/4ΞϓϦͰঢ়ଶΛ7JFX$POUSPMMFSؒͰڞ༗͢ Δ͜ͱ͕ଟ͍ w -JLF w ίϝϯτ w ΤϯτϦใͷՃɺฤूɺআ
w 7JFX.PEFMΛCJOE͢Ε7JFXࣗಈߋ৽ʹ͍ͨ͠
3FBDUJWF$PDPBຊͷ.77. w 3"$7JFX.PEFMΛܧঝͯ͠7.Λ࣮ w )551ϦΫΤετͷ։࢝·Ͱ7.͕࣋ͭ w 7JFX$POUSPMMFSʹ3"$4JHOBMΛฦͯ͠ ॲཧͷޭɺࣦഊΛड͚ͱΔ w 3"$4JHOBMґଘͷઃܭʹͳΔͷͰࠓͷͱ
͜Ζෆ࠾༻
ͷߟ͑ΔΏΔ͍.77. w ͱʹ͔͘.VUBCMFͳͷ7.ʹूΊΔ w +40/͔Βੜ͞Εͨ/40CKFDU*NNVUBCMFʹ w 7.ʹର͢ΔϢχοτςετΛॻ͘ w 3"$CJOEͷΈʹ͏ FLItem
*item = self.items[indexPath.item]; ! __weak typeof(self) weakSelf = self; // ৄࡉͰLikeΛ֎ͨ͠ΒҰཡͰLike͕֎ΕΔΑ͏ʹ͢Δ [RACObserve(item, liked) subscribeNext:^(id x) { [weakSelf.collectionView reloadItemsAtIndexPaths:@[indexPath]]; }];
'SJMͷ7. w ෳͷ+40/༝དྷ/40CKFDUΛ͍࣋ͬͯΔ w λΠϜϥΠϯͱৄࡉϏϡʔͷ"1*͝ͱʹऔΕΔใ ͷৄࡉ͕ҧ͏ͷͰɺ߹ͯ͠܅͚ͩͷ.PEFMΛ࡞ Δඞཁ͕͋Δ
'SJMͷ7. λΠϜϥΠϯ"1* ৄࡉ"1* αΠζ ૹྉ ૹํ๏ ίϝϯτ ໊ ϒϥϯυ
Ձ֨ αΠζ ૹྉ ૹํ๏ ίϝϯτ ໊ ϒϥϯυ Ձ֨ 7JFX.PEFM
'SJMͷ7. w 7JFX.PEFMΛ3"$ͰCJOE w 7JFX.PEFMΛߋ৽͢Δ w 7JFXʹࣗಈతʹঢ়ଶ͕ө͞ΕΔ w +40/ͷू ঢ়ଶͷू
7JFXͷಉظ αΠζ ૹྉ ૹํ๏ ίϝϯτ ໊ ϒϥϯυ Ձ֨ 7JFX.PEFM
'31ͷڭࡐ
5IFJOUSPEVDUJPOUP3FBDUJWF 1SPHSBNNJOHZPVWFCFFONJTTJOH w IUUQTHJTUHJUIVCDPNTUBMU[ FFCDBCDG w ϦΞΫςΟϒ·ͱΊ w ೖฤͱͯ͠Ұ൪ྑ͍ͱࢥ͏
1SJODJQMFTPG3FBDUJWF 1SPHSBNNJOH w $PVSTFSB w 4DBMBͱBLLBΛͬͨ'31ͷߨٛ w .BSUJO0EFSTLZઌੜ͔Βश͑Δ w '31ͷجૅΛஸೡʹղઆ
w ΫϥΠΞϯτΞϓϦͷͳ͍ w 3"$Λ͍͍͚ͨͩͳΒΦʔόʔεϖοΫ͔
3FBDUJWF1SPHSBNNJOHJOJ04 w 3FBDUJWF$PDPBͷຊ w ϖʔδ͘Β͍ w .77.ͷΓํॻ͍ͯ͋Δ w 3"$ͷυΩϡϝϯτͰॆઆ͋Γ w
ݸਓతʹಡΜͰଛͳ͔ͬͨ
·ͩΑ͘ཧղͰ͖ͯͳ͍͜ͱ w ଞͷ'31ϑϨʔϜϫʔΫͱ3"$ͷ༻ޠରԠ w $MBTTJD'31 4JHOBM'VODUJPO w Ξχϝʔγϣϯͱͷ૬ੑ͕ѱ͍આ
·ͱΊ w '31ͱεϚʔτϑΥϯΞϓϦͷؔʹ͍ͭͯઆ໌͠ ·ͨ͠ w 3FBDUJWF$PDPBͷஈ֊తͳ࠾༻ w 7BMJEBUJPOͰͷ༻ɺEFMFHBUFϥούʔ w .77.ͷ؇͔ͳҠߦ
w զʑ·ͩ3"$தಟͰͳ͍ʜ
࣭ٙԠ w .77.ͷղऍ͕ҧ͏ͷͰͳ͍͔ɺωοτϫʔΫ ॲཧ·Ͱ7.ʹ࣋ͨͤΔํ͕ࣗવͩͱࢥ͏ w 7.ʹ࣋ͨͤͨํ͕ΑΓ៉ྷʹॻ͚Δͷཧղ͠ ͍ͯΔ͕ɺ7.ͷΠϯλʔϑΣΠεʹ3"$4JHOBM ΛΘͳ͘ͳΒͳ͚Ε͍͚ͳ͘ͳΔͷͰɺࠓͷ ͱ͜Ζ͍ͬͯͳ͍