🔖

Swiftでプリントデバッグする時にクラスや関数名を表示する

2020/11/28に公開

プログラムの処理の流れを追うのに各関数に関数名をプリントする命令を書いてデバッグすることがある。そこで表示する情報としてクラス名や呼ばれている関数名などの情報をSwiftで取得するには以下の方法で可能だ。(クラス名以外はspecial literalとして用意されている)

クラス名

type(of:)でクラス名がStringで取得可能。

print("\(type(of: self))")	// TestViewController

type(of:)の詳細は下記を参照。
https://developer.apple.com/documentation/swift/2885064-type

関数名

#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については下記ページに詳しく載っている。
https://docs.swift.org/swift-book/ReferenceManual/Expressions.html
面白いのはパラメータのデフォルト値として使用されると式が評価される時に呼んだ側の情報が使われると言うこと。こんな例が載っている。

func logFunctionName(string: String = #function) {
    print(string)
}
func myFunction() {
    logFunctionName() // Prints "myFunction()".
}

プリントデバッグは手っ取り早く行えるので表示する内容もspecial literalsなどを使って記述量を少なく簡単に済ませたい。

Discussion