【新サービス告知】いつでもどこでもイベントを開催できる。スマホのWebカメラを利用したVRイベントスペースサービス(Meetatcube.com)
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

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

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/")
        }
    

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

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


2021-04-22 14:54:53

かっこいいカルーセル厳選3点!WebGLを使った渋い画像スライダー。

昨日カッコいいスライダーを探す旅にでていました。 よく使われるswiper など、シンプルで使いやすくデザインも良いのですが、何かもの足りない、、、。 そこで調べていくと、webglを使...

2021-04-20 14:46:43

Twillioとは何??skywayとは何が違うのか。webrtcを使う際に判断する情報。

先日webrtc開発で「twillio」といった名前を聞きました。 以前自分でskywayを使ってwebrtcを試していた際に調べた時には、無かったような気もするんだけと、KDDIが絡んでいる...

2021-04-19 13:58:21

先日久々にアップデートした妊娠週刊パパのAndroid版も。アカウント移管したいんだけど、注文ID見当たらないよ。

先日の妊娠、出産、育児関連のアプリ「妊娠週刊パパ」をAndroid studioで再リリースしようと思ってるんだけど、コンパイル失敗してエミュレータで動かせない。 多分sdkとかapiのバージ...
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!