あるメソッドが、どのメソッドから呼ばれているのか気になるときがあります。
ファイルを辿っていけば最終的には見つかりますが、複数のメソッドを同時並行で追うのはなかなか面倒です。
そんなとき、debug identifiers(デバッグ識別子)をデフォルトパラメータとして使うと捗ります。
環境
Version 8.0 beta
Swift 3.0
変更前
例えば、こんなメソッドがあるとします。
何の変哲もないIntを合計し、printするだけのメソッドです。
このメソッドの呼び出し元を知りたいとき、どうしたらよいでしょうか?
func addTwoInts(a: Int, b: Int) {
let sum = a + b
print("\(sum)")
}
変更後
#file, #line, #functionを引数として使います。
デフォルトパラメーターとして使うことで、addTwoIntsがどのメソッドに呼ばれたのかがわかるようになります。
func addTwoInts(a: Int, b: Int,
absolutePath: String = #file, line: Int = #line, function: String = #function) {
// 絶対パスをファイル名だけにする
let file = absolutePath.components(separatedBy: "/").last ?? absolutePath
print("\(file):\(line) >>> \(function)")
let sum = a + b
print("\(sum)")
}
ViewDidLoad()から呼び出すと、ファイル名、ライン番号まで出力される。
出力
ViewController.swift:65 >>> viewDidLoad()
しかも、引数の数を変更したから各所でコンパイルエラーが発生する、といった心配もありません。
addTwoIntsは、2つのIntを受け取れば良いままです。