Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ReactiveCocoa Tokyo LT

2014/10/18(土)に五反田の株式会社freeeさんで行われた勉強会[「Reactive Cocoa Tokyo」](http://connpass.com/event/8680/)のLTで発表した内容です。

※ 公開用に修正しています。

  • Be the first to comment

ReactiveCocoa Tokyo LT

  1. 1. Bolts-iOSを”ちょっと”駆使した 非同期処理の例 ReactiveCocoa Tokyo @freee株式会社
  2. 2. RACの話はしないしする気もない。 いいね?
  3. 3. 自己紹介 • @huin • blog.huin.me • Work at : - VOYAGE GROUP - genesix, Inc. • iOS歴3年くらい
  4. 4. What is Bolts ? • Parse(Facebook?)製の非同期処理ライブラリ • Promiseっぽい何か (メソッド名などが違う程度) • PromiseKitに比べると人気がない
  5. 5. // Objective-C - (BFTask *) fetchAsync:(PFObject *)object { BFTaskCompletionSource *task = [BFTaskCompletionSource taskCompletionSource]; [object fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { if (!error) { [task setResult:object]; } else { [task setError:error]; } }]; return task.task; }
  6. 6. // Objective-C - (void) doSomething { BFTask *task = [self fetchAsync:self.object]; [task continueWithBlock:^id(BFTask *task) { if (task.error) { // handle error }else{ // do post fetch task… } return task; }]; }
  7. 7. 所感 • 非同期処理の代表といえばネットワーク処理 • BFTaskオブジェクトを返すことでblocksを引き回さなくて も良くなるのでコードが綺麗になる • でもそれでいいんだろうか?
  8. 8. ポケットIRでの例 http://goo.gl/zYSYpI
  9. 9. 下からフェードイン 上へフェードアウト データの読み込み
  10. 10. 不可避なネットワーク処理の間、 アニメーションを駆使することで ユーザーの待機ストレスを減らしたい. 例) ローディングインジケータとか
  11. 11. 1.処理のリスト 1. ロゴの出現アニメーション 2. ユーザー登録(if required) 3. お気に入りの取得 4. ロゴの非表示アニメーション 5. 次の画面への遷移 a. 実行順序 a. 2→3は非同期処理を順番に実行 b. 1とタスクaは並列に処理する (タスクb) c. タスクaとbの遅い方を タスクbの完了とする d. タスクbが完了したら 4を開始する e. 4が完了したら5を実行
  12. 12. // タスク(1) : ロゴの表示アニメーション BFTask *welcomeTask = [self showAnimationTask]; ! // タスク(2) : ユーザー登録 BFTask *userTask = [[self saveUserTask] continueWithBlock:^id(BFTask *task) { if (task.error) { return task; } // タスク(3) お気に入りの取得. タスク(2)の後に実行される. return [self fetchFavoriteTask]; }]; ! // タスク(b) : タスク(1)とタスク(a)の2つを並列に処理する BFTask *tasks = [BFTask taskForCompletionOfAllTasks:@[welcomeTask, userTask]]; ! [[tasks continueWithSuccessBlock:^id(BFTask *task) { ! // タスク(4) : ロゴの非表示アニメーション. タスク(b)完了後に実行される. return [self hideAnimationTask]; }] continueWithBlock:^id(BFTask *task) { if (task.error) { [UIAlertView alertWithError:task.error]; }else{ // タスク(5) : 次の画面への遷移 [self segueToNextView]; } return task; }];
  13. 13. • ネットワーク処理だけに限らず使いドコロはあるか も. • もっとアニメーション凝っても良いかも (例 : アニメーション表示のプログレスバーをどうすれば体感速度がアップするのかが判明 | GIGAZINE http://goo.gl/6EaJQe) • ご利用は計画的に (非同期処理すべてでBolts使うべき?) • ※ Bolts-iOSである必要はないので好きなライブラリで 書けばいいよ!!
  14. 14. iOSエンジニア募集中! http://voyagegroup.com/crew/recruit/career/sdk/

×