Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 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

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

dealforest
Freelance iOS developer, create Tuna and Cichlid of Xcode Plugin
http://blog.dealforest.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away