71
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【iOS】 コールバック地獄から脱出する為のライブラリ一覧

Last updated at Posted at 2014-02-24

Blocksのコールバックを使ってるとコールバック地獄に陥りやすいですよね。
(例:ボタンタップ→アラート確認→通信→通信結果を元に...)

この問題を解決する為のライブラリを作るにあたって、
参考にさせていただいたライブラリを尊敬の念をこめつつ以下に挙げておきます。

実現したいこと

引用ですが、以下のことをiOSで実現したいと考えています。

非同期処理を同期的に書く
「同期的に」とはどういうことか? 代表的な要件としては

  • ネストが入れ子にならない
  • 上から下に読んで実行フローが把握できる
  • 非同期処理の結果得られた値を次の処理に引き回せる
  • try/catchで素直に例外を捕捉できる

[generatorとJavaScriptの非同期処理]
(http://qiita.com/hitsujiwool/items/316f3e8a41fb7dc3a119)

future/promise, jQuery.Deferredについて

既存のiOSライブラリは、ほとんどがJavascript界隈での同種の問題解決に用いられているjQuery.Deferred
(future/promiseパターンを実装したもの)を参考にしているようです。
これらの理解が無かった場合、ライブラリの解読と使用は苦労すると思います。(経験談)
僕が勉強させていただいたサイトを載せておきます。

では以下ライブラリ一覧

#STDeferred
https://github.com/saiten/STDeferred

2012年という先見性と使い勝手に脱帽。
UIパーツに持たせてUIパーツのイベント発火まで一連の処理を待たせるなんかも出来る。
ただ、コードが僕のような中の下レベルでは難解。(pipe周り)

参考
Objective-CでDeferredライブラリを作ってみた

#Bolts-iOS
https://github.com/BoltsFramework/Bolts-iOS

最近(2014年2月)発表されたParse社(現 Facebook傘下)のフレームワーク。
Androidなんかのもある。
https://github.com/BoltsFramework

参考記事
Parse、iOSとAndroid用の低レベルライブラリ集、Boltsを発表

#OMPromises
https://github.com/b52/OMPromises

CommonJSのPromises/Aにインスパイアされたそうです。
比較的コードが追いやすい。勉強になります。

#Sequencer
https://github.com/berzniz/Sequencer

コードが超シンプル。やれる事もシンプル。
潔さも勉強になる。

#KSDeferred
https://github.com/kseebaldt/deferred

詳細不明。

#objc-promise
https://github.com/mproberts/objc-promise#objc-promise

詳細不明。

#MAFuture
https://github.com/mikeash/MAFuture

詳細不明。
2010年に作られている。知ってる中では一番早い。
MRC(not ARC)。

#PromiseKit
https://github.com/mxcl/PromiseKit

最近(2014年5月時点)出てきた模様。
サイトもある。
Swift対応してる!

PromiseKit

##その他の方法
アプローチは上記ライブラリとは違ってきますが、ReactiveCocoaでも実現可能なのでは?と思ってます。
(検証していません)

https://github.com/ReactiveCocoa/ReactiveCocoa
ReactiveCocoaとFunctional Reactive Programmingについて

##参考
以下が興味深く読めて勉強になりました。

##自作してみた
自作したものを公開してみました。
明らかに参考にしたライブラリには劣りますが、分かりやすい実装にはなったかなと。
よかったら見てみて下さい。指摘等頂ければ感謝します。

ARNDeferred

71
69
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?