🌟
【Swift】dump関数について
dump関数とは?
dump関数はprint関数と同様、与えられた値の出力を行う関数です。print関数との違いは出力時にインデントを用いて階層を表現してくれる点にあります。複雑な構造体やクラスを出力をする際に便利です。
@discardableResult
func dump<T>(
_ value: T,
name: String? = nil,
indent: Int = 0,
maxDepth: Int = .max,
maxItems: Int = .max
) -> T
具体例
以下のコードで試してみます。
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