LoginSignup
109
83

More than 5 years have passed since last update.

Swiftのデバッグにdumpが使える

Last updated at Posted at 2016-10-15

Swiftでクラスのインスタンスの中身を確認しようとしたとき、
こんな経験はありませんか?

class Member {
    let name: String
    let age: Int
    let account: Account

    init(name: String, age: Int, account: Account) {
        self.name = name
        self.age = age
        self.account = account
    }
}

let yoshio: Member = Member(name: "yoshio", age: 62, account: account)

// 出力!
print(yoshio)

出力結果:

LLDB 2016-10-15 18.01.01.png

うん。知ってる

そんな中、最近@shapesさんのツイートで、dump関数がSwiftでも使えることを知ったので、少しだけ掘り下げてご紹介します。

dumpメソッドを使うメリット

ビルトイン関数のdump(value: T)を使うと、
クラスのインスタンスがインデント付きで確認できて便利です。

let yoshio: Member = Member(name: "yoshio", age: 62, account: account)
dump(yoshio)

出力結果:

 LLDB2 2016-10-15 18.07.40.png

ちゃんと、yoshioオブジェクト内のaccountオブジェクト(構造体)まで、階層になって見れてます

printとdumpを比較してみた

他にもdumpを使ったほうが便利なケースはないか検証してみました

辞書

let dict: [String: String] = ["職業": "エンジニア", "趣味": "ゲーム"]
print(dict)
print("-------")
dump(dict)

dict.png

printのほうがkey: valueの形になっているので、見やすい

配列

let primeNumber: [Int] = [2, 3, 5, 7, 11, 13, 17, 19]

print(primeNumber)
print("-------")
dump(primeNumber)

array.png

どっちでもいい..。
ただ、dumpだと配列の個数まで見れるので、ケースによっては便利かも。あと多重配列のときとか

タプル

let tuple: (String, Int) = ("hiroshi", 29)
print("-------")
print(tuple)
dump(tuple)

tuple.png

どっちでもいい..。

構造体

let account: Account = Account(id: 001, email: "hiroshi@example.com")
print("-------")
print(account)
dump(account)

struct.png

どっちでもいい

ためしに..

ViewControllerのself.view.frameを出力したところ

print(self.view.frame)
dump(self.view.frame)

CGRect.png

d..dumpのほうが見やすい!

printの場合、値だけが出力されますが、
dumpだとCGRect内のorigin: CGPointsize: CGSizeプロパティまで掘って見やすく表示してくれるようです。

109
83
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
109
83