Edited at
iOSDay 19

爆速でプリントデバッグするライブラリを作ったよ

More than 3 years have passed since last update.


動機

println から debugPrintln に書き換えたり、メソッドチェーンの途中で println を挟むのってめんどくさくないですか?

僕はめんどくさいです。


サンプルコード

Alamofire を使った場合だとこんな感じで書くかと思います。

Alamofire.request(.GET, "http://httpbin.org/get")

.responseJSON { (_, response, JSON, _) in
println(response)
println(JSON)
}

メソッドチェーンをやめて変数で受けるとこんな感じですかね。

var request = Alamofire.request(.GET, "http://httpbin.org/get")

debugPrintln(request)
request.responseJSON { (_, response, JSON, _) in
println(response)
println(JSON)
}

まぁこの例だと第一引数に request オブジェクトがわたってきているからそれを debugPrintln しろって話なんですけどねw

request を debugPrintln することで curl を用いたコマンドを出力してくれるので重宝します。

見てもらえれば分かるように原型を崩しまくっちゃってますね。


Crying を作ったよ

dealforest/Crying

名前からして泣くを連想するかと思いますが、正解です。

CharthageCocoaPods にも対応してるんで簡単に使えるかなと思います。

CocoaPods の場合 swift ブランチを使う必要があります。

詳しくは「CocoaPods Is Ready for Swift」をみてください。

さて、爆速と謳うからにはどんなもんやねん、と思うわれるかもしれません。

前述したサンプルコードと同義です。

import Crying

Alamofire.request(.GET, "http://httpbin.org/get")></
.responseJSON { (_, response, JSON, _) in
response><
JSON><
}

どうですか?

原型を残したまま泣く顔文字を書くだけでいいんです。

顔文字
意味

><
println

></
debugPrintln

なにやら黒魔術的な雰囲気をただよわせていますね。

実際やってることは演算子を定義しているだけです。

とはいえ、ソースコードをほぼ変更することなく printlndebugPrintln を書くことができます。

どうやって実現するまでにいたったかを別エントリーにまとめてみたので、気になる方はどうぞ。


まとめ

みなさま満足していただけたでしょうか。

Crying があれば爆速でプリントデバッグができるようになりますね。

ただ、><></ を残したままコミットしたり配布したりするのは汚いのでやめた方がいいと思います。

あくまで一時的なデバッグのために使うくらいでのご利用をおすすめします。

何かフィードバック等があれば @dealforest まで連絡ください。

それでは良いデバッグライフを。


おまけ

iOS のアドベントカレンダーなのに Swift だけで終わらすわけにはいきません。

Objective-C の場合だと ikesyo/NSObject-Tap を使えば同じようなことができます。

ただこれを使うためには NSObject を継承してないと使えません。

NSString *str = [@"hoge".tapp() stringByAppendingString:@"/fuga"].tapp();

# hoge
# hoge/fuga

個人的にメソッド呼び出しを . でやるのは嫌いですけど、[] で囲うのはめんどくさいので、書いたら消すというスタンスのため妥協してます