Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > Debugを上手に使って作業効率をあげる

Debugを上手に使って作業効率をあげる

開発には避けて通れないデバッグの方法。Swiftの便利なデバックの仕方を説明します。私はphpを利用していましたので、dump処理が無いのが わかりずらいなぁとの経験がありましたので何か同じ悩みにがある人がいれば助けになれば嬉しいです


参考:How do I list (po) the contents of a Swift Array?
参考:Swift Debugging Tips
参考:Xcode Debugger: view value of variable

ダンプ処理(dumpに似た処理)

いろんな方法があります。Consoleでp(Rawダンプ=print)やpo(Objectダンプ=print description of the object), frame variableのfr vコマンドなんかもあります。

UIViewControllerの場合


println

ViewControllerのクラスインスタンスを利用して説明します。


   override func viewDidLoad() {
        super.viewDidLoad()
        println(self);//debugTestProject.ViewController: 0x7f9a18c9da10
    }
    
        

description  -> (結果)printlnと同じ


        
   override func viewDidLoad() {
        super.viewDidLoad()
        println(self.description);//debugTestProject.ViewController: 0x7f9a18c9da10
    }
    
    

debugDescription  -> (結果)printlnと同じ


        
   override func viewDidLoad() {
        super.viewDidLoad()
        println(self.debugDescription);//debugTestProject.ViewController: 0x7f9a18c9da10
    }
    

Consoleでpo

XCodeをBreakpointで止めてConsole上でpoで出力した場合は継承されている階層が表示されています。NSObjectとUIResponderを継承したUIViewControllerであることが分かります。


        po self
        
        0x00007f9a18c9da10
         {
          UIKit.UIViewController = {
            UIKit.UIResponder = {
              ObjectiveC.NSObject = {}
            }
          }
        }
         
    

UIImageの場合


println


        let url = NSURL(string:"http://swift-salaryman.com/files/image/page_top.gif");
        var err: NSError?;
        var imageData :NSData = NSData(contentsOfURL:url!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!;
        var img = UIImage(data:imageData);
        
        println(img);//Optional(UIImage: 0x7f85784be710)
        

description  -> (結果)printlnと同じ


        println(img?.description);//Optional(UIImage: 0x7f85784be710)
        

debugDescription  -> (結果)printlnと同じ


        println(img?.debugDescription);//Optional(UIImage: 0x7f85784be710)
        

consoleでpo


    po self
        
    UIImage: 0x7f85784be710
    

Dictionaryの場合


println


        var hogeDic: Dictionary = ["title": "swift-salaryman", "url": "http://swift-salaryman.com/"]
        println(hogeDic);//[title: swift-salaryman, url: http://swift-salaryman.com/]
        
        

description  -> (結果)printlnと同じ


        println(hogeDic.description);//[title: swift-salaryman, url: http://swift-salaryman.com/]
        

debugDescription  -> (結果)printlnと同じ


        println(hogeDic.debugDescription);//[title: swift-salaryman, url: http://swift-salaryman.com/]
        

consoleでpo


    po hogeDic
    
     {
      [0] = (key = "title", value = "swift-salaryman")
      [1] = (key = "url", value = "http://swift-salaryman.com/")
    }
    

ダンプ処理(Consoleのpo)をもっと簡単に

上で色々記載しましたがデバッグログ表記はXCodeのIDEから簡単に表示させることができます。

説明画像1

左下の変数リストの該当変数の上にカーソルを移動させて、、、右クリックのメニューを表示させて、Print Description of "XXXXX"をクリックします

説明画像2

コンソールに結果が表示されます。


    
        Printing description of hogeDic:
        ([String : String]) hogeDic = {
          [0] = (key = "title", value = "swift-salaryman")
          [1] = (key = "url", value = "http://swift-salaryman.com/")
        }
    

型も表示されているので一番詳細なのは右クリックからのデバッグのようです。表示も一番簡単なのでオススメです。

↓こんな記事もありますよ!

NSThreadでスレッド処理を行う

タイマー処理と同様に利用できるスレッドの処理です。NSTimerではヒゲがのびたサンプルでしたので眉毛の濃くなるサンプルにしてみます。ただ、どうやらThread処理は 推奨されておらず、dispatch_queueを使用するべきのようです。

UIImage

中年サラリーマンが画像をローカルやURLやあんな所からアクセスして表示するサンプルを説明しております。

AppleWatchでNotificationを受け取る。バイブでブルブル通知する。

どうやら現状はAppleWatchのバイブレーションパターンをカスタマイズできないようなのですが、Notificationを受け取る際に ブルブルする状態のようです。つきましては、NotificationをApp側で設定、AppleWatch側で受け取ってブルブルするサンプルを記載していきます。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!