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.8k
ゆるやかなReactiveCocoaの導入
Fablic社でのReactiveCocoaの(ゆるい)導入事例
ninjinkun
August 03, 2014
Tweet
Share
More Decks by ninjinkun
See All by ninjinkun
買収から2ヶ月でシステム統合した話
ninjinkun
0
71
Designer's and Engineer's Thinking Styles
ninjinkun
0
180
Launchable Webinar テストを効率化して生産性を上げる方法
ninjinkun
2
540
ディープリンクの 設計と実装 - iOSDC2017
ninjinkun
18
10k
スマートフォンアプリ開発における共創的な開発チーム
ninjinkun
61
19k
ReSwiftでアプリの状態管理 / Reactive Swift Meetup
ninjinkun
9
16k
フリルのアプリ開発今昔物語
ninjinkun
3
2.2k
プロトタイピング合宿によるデザインリニューアル
ninjinkun
1
3.1k
デザイナーが仕事をしやすいアプリエンジニアを考える
ninjinkun
4
660
Other Decks in Programming
See All in Programming
複雑なフォームの jotai 設計 / Designing jotai(state) for Complex Forms #layerx_frontend
izumin5210
6
1.6k
Instrumentsを使用した アプリのパフォーマンス向上方法
hinakko
0
250
私のRubyKaigi 2025 Kaigi Effect / My RubyKaigi 2025 Kaigi Effect
chobishiba
1
110
Beyond_the_Prompt__Evaluating__Testing__and_Securing_LLM_Applications.pdf
meteatamel
0
110
SwiftDataのカスタムデータストアを試してみた
1mash0
0
150
AIコーディングの理想と現実
tomohisa
37
40k
エンジニアが挑む、限界までの越境
nealle
1
330
MySQL初心者が311個のカラムにNot NULL制約を追加していってALTER TABLEについて学んだ話
hatsu38
2
140
ビカム・ア・コパイロット
ymd65536
1
130
オープンソースコントリビュート入門
_katsuma
0
130
個人開発の学生アプリが企業譲渡されるまで
akidon0000
2
1.2k
20250429 - CNTUG Meetup #67 / DevOps Taiwan Meetup #69 - Deep Dive into Tetragon: Building Runtime Security and Observability with eBPF
tico88612
0
180
Featured
See All Featured
Designing for Performance
lara
608
69k
Bash Introduction
62gerente
613
210k
For a Future-Friendly Web
brad_frost
177
9.7k
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.7k
Thoughts on Productivity
jonyablonski
69
4.6k
Designing for humans not robots
tammielis
253
25k
Fontdeck: Realign not Redesign
paulrobertlloyd
84
5.5k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Scaling GitHub
holman
459
140k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
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 ΛΘͳ͘ͳΒͳ͚Ε͍͚ͳ͘ͳΔͷͰɺࠓͷ ͱ͜Ζ͍ͬͯͳ͍