動機
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 を作ったよ
名前からして泣くを連想するかと思いますが、正解です。
Charthage
や CocoaPods
にも対応してるんで簡単に使えるかなと思います。
CocoaPods の場合 swift ブランチを使う必要があります。
詳しくは「CocoaPods Is Ready for Swift」をみてください。
さて、爆速と謳うからにはどんなもんやねん、と思うわれるかもしれません。
前述したサンプルコードと同義です。
import Crying
Alamofire.request(.GET, "http://httpbin.org/get")></
.responseJSON { (_, response, JSON, _) in
response><
JSON><
}
どうですか?
原型を残したまま泣く顔文字を書くだけでいいんです。
顔文字 | 意味 |
---|---|
>< | println |
></ | debugPrintln |
なにやら黒魔術的な雰囲気をただよわせていますね。
実際やってることは演算子を定義しているだけです。
とはいえ、ソースコードをほぼ変更することなく println
や debugPrintln
を書くことができます。
どうやって実現するまでにいたったかを別エントリーにまとめてみたので、気になる方はどうぞ。
まとめ
みなさま満足していただけたでしょうか。
Crying があれば爆速でプリントデバッグができるようになりますね。
ただ、><
や ></
を残したままコミットしたり配布したりするのは汚いのでやめた方がいいと思います。
あくまで一時的なデバッグのために使うくらいでのご利用をおすすめします。
何かフィードバック等があれば @dealforest まで連絡ください。
それでは良いデバッグライフを。
おまけ
iOS のアドベントカレンダーなのに Swift だけで終わらすわけにはいきません。
Objective-C の場合だと ikesyo/NSObject-Tap を使えば同じようなことができます。
ただこれを使うためには NSObject を継承してないと使えません。
NSString *str = [@"hoge".tapp() stringByAppendingString:@"/fuga"].tapp();
# hoge
# hoge/fuga
個人的にメソッド呼び出しを .
でやるのは嫌いですけど、[]
で囲うのはめんどくさいので、書いたら消すというスタンスのため妥協してます