🌟

【Swift】dump関数について

2023/12/21に公開

dump関数とは?

dump関数はprint関数と同様、与えられた値の出力を行う関数です。print関数との違いは出力時にインデントを用いて階層を表現してくれる点にあります。複雑な構造体やクラスを出力をする際に便利です。

@discardableResult
func dump<T>(
    _ value: T,
    name: String? = nil,
    indent: Int = 0,
    maxDepth: Int = .max,
    maxItems: Int = .max
) -> T

https://developer.apple.com/documentation/swift/dump(_:name:indent:maxdepth:maxitems:)

具体例

以下のコードで試してみます。

struct Person {
    let name: String
    var age: Int
    var ownedDevices: [Device]
}

struct Device {
    let name: String
    let price: Int
}

let jobs = Person(
    name: "Jobs",
    age: 50,
    ownedDevices: [
        .init(name: "iPhone", price: 100000),
        .init(name: "Apple Watch", price: 50000),
        .init(name: "iPad Pro", price: 150000),
        .init(name: "Macbook Pro", price: 200000)
    ]
)

print("-----------------------------")
print("print")
print(jobs)
print("-----------------------------")
print("dump")
dump(jobs)
print("-----------------------------")

出力結果は以下のとおりです。dump関数で出力されたものの方が見やすいと思います。

引数

struct Person {
    let name: String
    var age: Int
}

let jobs = Person(name: "Jobs", age: 50)
print("引数nameを指定した場合")
dump(jobs, name: "名前")
print("引数nameを指定しなかった場合")
dump(jobs)

indent

struct Person {
    let name: String
    var age: Int
}

let jobs = Person(name: "Jobs", age: 50)
print("引数indentを指定した場合")
dump(jobs, indent: 5)
print("引数indentを指定しなかった場合")
dump(jobs)

maxDepth

struct Person {
    let name: String
    var age: Int
    var ownedDevices: [Device]
}

struct Device {
    let name: String
    let price: Int
}

let jobs = Person(
    name: "Jobs",
    age: 50,
    ownedDevices: [
        .init(name: "iPhone", price: 100000),
        .init(name: "Apple Watch", price: 50000),
        .init(name: "iPad Pro", price: 150000),
        .init(name: "Macbook Pro", price: 200000)
    ]
)

print("引数maxDepthを指定した場合")
dump(jobs, maxDepth: 1)
print("引数maxDepthを指定しなかった場合")
dump(jobs)

maxItems

struct Person {
    let name: String
    let gender: String
    var age: Int
}

let jobs = Person(name: "Jobs", gender: "man", age: 50)
print("引数maxItemsを指定した場合")
dump(jobs, maxItems: 2)
print("引数maxItemsを指定しなかった場合")
dump(jobs)

蛇足

Gemini Proを使用中Chatを出力した時のスクリーンショットです。かなり見やすくなっています。

Discussion