Enviar pesquisa
Carregar
freee社でのReactiveCocoa活用例
•
23 gostaram
•
23,114 visualizações
yo_waka
Seguir
ReactiveCocoa Tokyoで発表した資料です。
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 33
Baixar agora
Baixar para ler offline
Recomendados
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
Syo Ikeda
RxJava on Android
RxJava on Android
yo_waka
Ruby風Swift NSOperation編
Ruby風Swift NSOperation編
Hisakuni Fujimoto
Sansan様 登壇資料
Sansan様 登壇資料
Daisuke Nagata
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
株式会社ランチェスター
Wpfと非同期
Wpfと非同期
yone64
本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)
Oda Shinsuke
Rx java x retrofit
Rx java x retrofit
Shun Nakahara
Recomendados
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
Syo Ikeda
RxJava on Android
RxJava on Android
yo_waka
Ruby風Swift NSOperation編
Ruby風Swift NSOperation編
Hisakuni Fujimoto
Sansan様 登壇資料
Sansan様 登壇資料
Daisuke Nagata
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
株式会社ランチェスター
Wpfと非同期
Wpfと非同期
yone64
本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)
Oda Shinsuke
Rx java x retrofit
Rx java x retrofit
Shun Nakahara
React入門-JSONを取得して表示する
React入門-JSONを取得して表示する
regret raym
Miyazaki.js vol.1 スコープの話
Miyazaki.js vol.1 スコープの話
Nobuhiro Nakashima
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
Postgresql advent calender 2014 using jsonb by ecpg
Postgresql advent calender 2014 using jsonb by ecpg
Toshi Harada
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Yukari Sakurai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
Starting java fx
Starting java fx
Kazuhiro Eguchi
20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone
Kenji Wada
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
Ayumi Kobukata
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
TanUkkii
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
Jsonp
Jsonp
Kiminari Homma
WebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにする
Takuya Kikuchi
明日から使える Java SE 7
明日から使える Java SE 7
Yuichi Sakuraba
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
Shinya Mochida
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
higaki
scala-kaigi1-sbt
scala-kaigi1-sbt
Kenji Yoshida
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
IRI MO
Android meets RxJava - 渋谷Java#6
Android meets RxJava - 渋谷Java#6
yo_waka
エンジニア戦記 〜小さなチーム、大きな未来〜
エンジニア戦記 〜小さなチーム、大きな未来〜
Yuki Hirai
Mais conteúdo relacionado
Mais procurados
React入門-JSONを取得して表示する
React入門-JSONを取得して表示する
regret raym
Miyazaki.js vol.1 スコープの話
Miyazaki.js vol.1 スコープの話
Nobuhiro Nakashima
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
Postgresql advent calender 2014 using jsonb by ecpg
Postgresql advent calender 2014 using jsonb by ecpg
Toshi Harada
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Yukari Sakurai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
Starting java fx
Starting java fx
Kazuhiro Eguchi
20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone
Kenji Wada
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
Ayumi Kobukata
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
TanUkkii
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
Jsonp
Jsonp
Kiminari Homma
WebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにする
Takuya Kikuchi
明日から使える Java SE 7
明日から使える Java SE 7
Yuichi Sakuraba
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
Shinya Mochida
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
higaki
scala-kaigi1-sbt
scala-kaigi1-sbt
Kenji Yoshida
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
IRI MO
Mais procurados
(20)
React入門-JSONを取得して表示する
React入門-JSONを取得して表示する
Miyazaki.js vol.1 スコープの話
Miyazaki.js vol.1 スコープの話
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
Postgresql advent calender 2014 using jsonb by ecpg
Postgresql advent calender 2014 using jsonb by ecpg
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp でAndroidのHTTP通信が快適だにゃん
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Starting java fx
Starting java fx
20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
JAWS-UG CLI #14 LT 【”Waiters”機能の使いドコロ】
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Jsonp
Jsonp
WebAPIのバリデーションを、型の力でいい感じにする
WebAPIのバリデーションを、型の力でいい感じにする
明日から使える Java SE 7
明日から使える Java SE 7
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
scala-kaigi1-sbt
scala-kaigi1-sbt
まだDOM操作で消耗してるの?
まだDOM操作で消耗してるの?
Destaque
Android meets RxJava - 渋谷Java#6
Android meets RxJava - 渋谷Java#6
yo_waka
エンジニア戦記 〜小さなチーム、大きな未来〜
エンジニア戦記 〜小さなチーム、大きな未来〜
Yuki Hirai
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
yohei sugigami
効率的なアプリ開発のベストプラクティス
効率的なアプリ開発のベストプラクティス
yayugu
let UIWebView as WKWebView
let UIWebView as WKWebView
Taketo Sano
minne の API 改善
minne の API 改善
Toshihiro Gotou
インフラで実践したチームビルディングそれはサバ天
インフラで実践したチームビルディングそれはサバ天
ume3_
ライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみよう
Masataka Kono
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
Masataka Kono
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
Shuichi Tsutsumi
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
Information sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile application
ichiko_revjune
Ruby 2.4 Internals
Ruby 2.4 Internals
Koichi Sasada
distinctUntilChanged の使いどころ
distinctUntilChanged の使いどころ
正之 安宅
DevOps tools for everyone - Vagrant, Puppet and Webmin
DevOps tools for everyone - Vagrant, Puppet and Webmin
postrational
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Masataka Kono
Destaque
(16)
Android meets RxJava - 渋谷Java#6
Android meets RxJava - 渋谷Java#6
エンジニア戦記 〜小さなチーム、大きな未来〜
エンジニア戦記 〜小さなチーム、大きな未来〜
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
iOS 通信のパフォーマンス改善 ・ iOSオールスターズ登壇資料
効率的なアプリ開発のベストプラクティス
効率的なアプリ開発のベストプラクティス
let UIWebView as WKWebView
let UIWebView as WKWebView
minne の API 改善
minne の API 改善
インフラで実践したチームビルディングそれはサバ天
インフラで実践したチームビルディングそれはサバ天
ライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみよう
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
WatchKitを実際にさわってみてわかったこと
WatchKitを実際にさわってみてわかったこと
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Information sharing and Experience consistency at Cookpad mobile application
Information sharing and Experience consistency at Cookpad mobile application
Ruby 2.4 Internals
Ruby 2.4 Internals
distinctUntilChanged の使いどころ
distinctUntilChanged の使いどころ
DevOps tools for everyone - Vagrant, Puppet and Webmin
DevOps tools for everyone - Vagrant, Puppet and Webmin
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
Semelhante a freee社でのReactiveCocoa活用例
Sendai.html5#2
Sendai.html5#2
Reoto Wakabayashi
Dev for Citizen Manual
Dev for Citizen Manual
テスト データ
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
Kenjiro Kubota
MVCもやもや話
MVCもやもや話
Tetsuya Kaneuchi
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
toyship
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
Fumiya Sakai
Angular js はまりどころ
Angular js はまりどころ
Ayumi Goto
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
WESEEKWESEEK
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
Tomoki Oyamatsu
SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発!
Koji Shiraishi
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03
Daiki Maekawa
jQuery Mobile
jQuery Mobile
yoshikawa_t
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
Tomohiro Ichimura
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0
Toshiro Shimizu
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
Daiji Hirata
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
NTT DATA Technology & Innovation
Driverについて
Driverについて
幸雄 村上
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Shumpei Shiraishi
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
Akinari Tsugo
Start SQL Server with Docker
Start SQL Server with Docker
Oshitari_kochi
Semelhante a freee社でのReactiveCocoa活用例
(20)
Sendai.html5#2
Sendai.html5#2
Dev for Citizen Manual
Dev for Citizen Manual
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
MVCもやもや話
MVCもやもや話
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
Angular js はまりどころ
Angular js はまりどころ
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
SwiftとCocoaPodsで始めるサクサクiOS開発!
SwiftとCocoaPodsで始めるサクサクiOS開発!
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03
jQuery Mobile
jQuery Mobile
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
MTDDC Meetup HOKKAIDO 2013 KEYNOTE - Movable Type 6
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
Driverについて
Driverについて
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
Start SQL Server with Docker
Start SQL Server with Docker
Último
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Último
(11)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
freee社でのReactiveCocoa活用例
1.
freee社での Reactive Cocoa
活用例 ReactiveCoaoa Tokyo #rac_tokyo @yo_waka 2014/10/18
2.
初めまして @yo_waka •
freeeという会計サービスのスタートアップで Web側とiOS/Androidアプリを作ってます • iOSアプリ開発歴(2014/01~) 以前*.frameworkを仕事で少し弄ってたくらい • JavaScriptはそこそこ
3.
freeeのiOSアプリ • 確定申告や小規模法人決算を
カンタンに • 既にWeb版がある • モバイルは基本機能を実装しつ つ、出先などでよりカンタン にデータ登録したり、外部機 器と連携したり
4.
ReactiveCocoa • 弊社アプリではコアライブラリとして使ってい
ます(新規開発だから使えたというのも理由) • RAC3とswiftの話しはしません! (@ikesyoさんがしてくれるはず・・) • freee社での導入の経緯とどう使っているかをご 紹介します
5.
アプリ開発談 • ある2013年12月の風景
• 「ユーザーの利便性向上の一環で、ウチでiPhone アプリを出そうと思う。1月から確定申告シーズ ンになって触ってくれる人も増えるので、来月出 したい」
6.
「来月出したい」 (゚Д゚)
7.
短期間リリース • -
エンジニア1人(アプリはほぼ未経験) 途中から1人エンジニアが参加して2人に • - 開発期間は1ヶ月
8.
でも • 短期間リリースだからといっても、出して終了ではない
ので、機能追加はしていかないといけない 最低限の機能でもちゃんと使いやすく作りたい • 会計サービスは結構UIが複雑 • スタートアップで後から設計変更してる余裕ない (いきなり大ヒット!とかだと話しは別かも) • なるべく長期間もちこたえられる設計を最初から模索す る必要がある
9.
変更に強い設計って なんだ
10.
サービスの特徴 • 会計データの入力時、ユーザーがViewの状態を
変化させることによって別のViewを変化、ある いは追加/削除するケースが多い => Viewの状態管理が複雑 • ユーザーが柔軟に会計用のデータセットを変え られるため、データの変更に応じてViewを再描 画するケースが多い => 複数のモデルを管理しないといけない
11.
(拡張)MVC Model UIViewController
Storyboard UIView 操作 イベント 呼び出し
12.
MVCの問題点 • シンプルな構造なら問題ない
• Fat UIViewController/Model • UIViewController+ViewsとModelは1:1とは限らないので、 ビジネスロジックが散らばる • APIどこのレイヤが叩くねん問題 • 画面内のイベントが増えると管理しずらい • Web版のクライアントMVCで上記の問題を抱えている
13.
MVVM ViewModel UIViewController
Story board UIView 呼び出し イベント Model 操作 イベント 呼び出し
14.
ViewModel • UIViewControllerの状態管理
• APIリクエストの発行 • Model(s)の操作
15.
と、いうわけで
16.
freeeアプリ構成 ViewModel UIViewController
Story board UIView RAC Model (Mantle) 操作 RAC API Client (AFNetworking) RAC
17.
MVVMの レイヤ間をRACで繋ぐ
18.
ReactiveCocoa • UIViewControllerとView間のイベント管理
• View間のデータバインディング • UIViewControllerとViewModel間のデータバインディング • ViewModelとAPIClient間のデータバインディング
19.
UIViewControllerとView間の イベント管理 YRLG
20.
VHWXS9LHZV ^ 8,1LE IL[HG1LE
8,1LEQLE:LWK1LE1DPH#6RPH1LE1DPHEXQGOHQLO@ VHOIIL[HG9LHZ IL[HG1LELQVWDQWLDWH:LWK2ZQHUVHOIRSWLRQVQLO@@ VHOIYLHZDGG6XEYLHZVHOIIL[HG9LHZ@ ! :($.,)VHOI
21.
! ࣇࣽऍࣕअࣶࣙऍࡨ༇ࡱࢨࡻࢥ࣭ࣿखࢮᦻࡴࢧ VHOIIL[HG9LHZFDQFHO%XWWRQUDFBFRPPDQG
5$RPPDQGDOORF@ LQLW:LWK6LJQDO%ORFNALGB
22.
^ 67521*,)6(/)
23.
6(/)FORVH)L[HG9LHZ@ UHWXUQ5$6LJQDOHPSW@ `@
` RACのカテゴリ拡張を 使って簡易に書ける
24.
View間のバインディング YRLG
25.
VHWXS ^ :($.,)VHOI
26.
! ࣠ࣇ࣓࣯ࢽखअࣣࢇࡨࡿࡻࢥ࣪ऄ࣡ख࣑ँऍ 5$6LJQDOFRPELQH/DWHVW#5$2EVHUYHVHOIWH[W
27.
VHOIUDFBWH[W6LJQDO@ UHGXFHALGLGRQHLGWZR
28.
^ UHWXUQQLO `@VXEVFULEH1H[WALG[
29.
^ 67521*,)6(/)
30.
6(/)YDOLGDWH@ `@ !
ัᩒ૯ࡳࡻ᧻ࢇ࣪ऄ࣡ख࣑ँऍ 5$2EVHUYHVHOIUHTXLUHG
31.
VXEVFULEH1H[WA161XPEHU HQDEOHG
32.
^ 67521*,)6(/)
33.
LIHQDEOHGERRO9DOXH
34.
^ 6(/)YDOLGDWH@ `
`@ ! (PDLO࣯ࢽखअࣣ૯ࡳࡻ᧻ࢇ࣪ऄ࣡ख࣑ँऍ 5$2EVHUYHVHOILV(PDLO)LHOG
35.
VXEVFULEH1H[WA161XPEHU HQDEOHG
36.
^ 67521*,)6(/)
37.
LIHQDEOHGERRO9DOXH
38.
^ 6(/)YDOLGDWH@ `
`@ RACObserveとTextSignalを まとめてsubscribe プロパティの変更を RACObserveで監視して subscribe
39.
UIViewControllerとViewModel間 のバインディング YRLG
40.
IHWFK2EMHFWV ^ 693URJUHVV+8'VKRZ:LWK6WDWXV16/RFDOL]HG6WULQJ#/2$',1*QLO
41.
PDVN7SH693URJUHVV+8'0DVN7SHOHDU@ ! :($.,)VHOI
42.
! 9LHZ0RGHOࡧࢥ$3,ࢮହࡠࢂ࣠खࣰअ࣭ࣿखࢮUHORDG
ࣂःखࢆࢥࣻࣝࣕख࣒ࢮᝊᐱ VHOIYLHZ0RGHOIHWFKROOHFWLRQ@VXEVFULEH1H[WALGREM
43.
^ 693URJUHVV+8'GLVPLVV@ !
67521*,)6(/)
44.
6(/)WDEOH9LHZUHORDG'DWD@ `HUURUA16(UURU HUURU
45.
^ 166WULQJ HUURU0HVVDJH HUURUXVHU,QIR#HUURUBPHVVDJHVBWRBGLVSOD@
693URJUHVV+8'VKRZ(UURU:LWK6WDWXVHUURU0HVVDJH@ `@ ` ViewModelは RACSignalを返す
46.
ViewModelとAPIClient間の バインディング 5$6LJQDO
47.
IHWFK:DOOHW7[QV ^ LIVHOIORDGLQJ
(6
48.
^ UHWXUQ5$6LJQDOHPSW@ `
VHOIORDGLQJ (6 ! APIClientはRACSignalを返す 5$6LJQDO VLJQDO $SLOLHQWVKDUHG,QVWDQFH@ VLJQDO:LWK5HTXHVW#*(7 APIコールの結果をsubscriber SDWK#$3,85/ SDUDPHWHUVSDUDPV@ ! で受け取る :($.,)VHOI
49.
! आ࣓ࣷऍ࣓ࢮࣼ࣡अࣉः࣓૯ࡳࢂ9LHZ0RGHOࢇ৶༧ UHWXUQVLJQDOGR1H[WA16'LFWLRQDU UHVSRQVH2EMHFW
50.
^ 67521*,)6(/)
51.
! IRU16'LFWLRQDU REMLQUHVSRQVH2EMHFW#PRGHOV@
52.
^ 16(UURU HUURU QLO
1LFH0RGHO PRGHO 07/-621$GDSWHUPRGHO2IODVV1LFH0RGHOFODVV@IURP-621'LFWLRQDUREM HUURU HUURU@ ! LIHUURU QLO
53.
^ 6(/)FROOHFWLRQDGG2EMHFWPRGHO@ `
` `@GR(UURUA16(UURU HUURU
54.
^ 67521*,)6(/)
55.
6(/)ORDGLQJ 12 `@
` doNextでコールバックを書 きつつRACSignalを返せる
56.
ViewModelとAPIClient間の バインディング
ࢼࣉ࣓ࣕखࣉऍࢮଯยࡳࢂ࠵ऀख࣐खవࢄધှᄚᓌࢇัឃࢆ࣡खࣙࢮଯยࡵࢧ࠶ 5$6LJQDO
57.
ORJLQ16'LFWLRQDU
58.
SDUDPV ^ :($.,)VHOI
59.
! 5$6LJQDO VLJQDO VHOIIHWFK7RNHQSDUDPV@IODWWHQ0DSALGUHVSRQVH2EMHFW
60.
^ 67521*,)6(/)
61.
5$6LJQDOࢮᣎࡵ$3,ऄࣉࣂ࣓ࢮग़દࢇᝁࡳ࠵ ᔬၯࢮ5$6LJQDOࢃରଯࢧ UHWXUQ6(/)JHW8VHU'DWD@FRPELQH/DWHVW:LWK6(/)IHWFK,URLUR@
UHIUHVKDFKH@@ `@ UHWXUQVLJQDO `
62.
なぜ ReactiveCocoa?
63.
勉強し始めの頃 • まずは認証/APIクライアントちゃんと書かない
となー • よい設計の参考になりそうなライブラリのコー ドをいろいろ読んでみた • GitHub社のoctkit.objcを読んだ
64.
octokit.objc • OctoKit
is a Cocoa and Cocoa Touch framework for interacting with the GitHub API, built using AFNetworking, Mantle, and ReactiveCocoa.
65.
ソースめっちゃ綺麗 これ参考にしよう
66.
RACのドキュメント見た • @ikesyoさんのQiitaに資料がまとまってる
http://qiita.com/ikesyo/items/ff0fdc179baa92a144ee • Functional Reactive Programming in iOS 多分唯一の?ReactiveCocoaとMVVMについて書かれている本 https://leanpub.com/iosfrp • RACSignalはどんなストリーム上にも作れることが分かった • API周りだけじゃなくて、コンポーネント間のデータのやり取りに使える んじゃね? • RACObserve使えばシンプルにデータバインディングできるし、Viewで も使えそう
67.
かくしてロックイン されました
68.
ロックインのPros/Cons • Pros
• MVVMの各コンポーネント間のコードが統一される (=新しく入った人の学習コスト減) • 1つSignal設計すると使い回しがしやすい • Signal設計楽しいれす • カテゴリ拡張(NSNotification#rac_addObserverForNameとかUITextField#rac_textSignal)がと にかく便利 • RACObserveサイコー • Cons • SubscriberやRACSignalのコードを理解するのが難しい・・ • 性質上既存のアプリに導入するのは大変(腕力を持ったエンジニアが必要) • RACが死ぬと我々も死ぬ
69.
RACの学習コスト • JVMの世界でもリアクティブプログラミングが
盛り上がってきてる(ReactiveStream) • AndroidでMVVMやる場合も同じ考え方で使い 回しが効くので便利(freeeではAndroidアプリ でもRxJavaを使ってMVVM構成にしています) • まずはRACObserveでKVOの置き換えから!
70.
ありがとうございました
71.
iOS/Androidについて語りたい人いたらいつでも 遊びにきてください。 !
夕飯出ます お酒もありますので 気軽に声かけてください
Baixar agora