🔖
Swiftでプリントデバッグする時にクラスや関数名を表示する
プログラムの処理の流れを追うのに各関数に関数名をプリントする命令を書いてデバッグすることがある。そこで表示する情報としてクラス名や呼ばれている関数名などの情報をSwiftで取得するには以下の方法で可能だ。(クラス名以外はspecial literalとして用意されている)
クラス名
type(of:)
でクラス名がString
で取得可能。
print("\(type(of: self))") // TestViewController
type(of:)
の詳細は下記を参照。
関数名
#function
で関数名をString
で取得可能。
print("\(#function)") // viewWillAppear(_:)
ファイル名
#filepath
で実行している箇所のあるファイルのパスをString
で取得可能。
#file
はSwiftのバージョンによって内容が変わるので使わない方が無難。
print("\(#filepath)") // /Users/paraches/TestProj/TestProj/TestViewController.swift
行番号
#line
で実行している箇所のあるファイルの行番号をInt
で取得可能。
print("\(#line)") // 34
列番号
#colmn
で実行している箇所のあるファイルの列番号をInt
で取得可能。
print("\(#colmn)") // 23
最後に
Swiftのspecial literalsについては下記ページに詳しく載っている。
面白いのはパラメータのデフォルト値として使用されると式が評価される時に呼んだ側の情報が使われると言うこと。こんな例が載っている。func logFunctionName(string: String = #function) {
print(string)
}
func myFunction() {
logFunctionName() // Prints "myFunction()".
}
プリントデバッグは手っ取り早く行えるので表示する内容もspecial literalsなどを使って記述量を少なく簡単に済ませたい。
Discussion