しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

【Swift】呼び出し元のメソッド名を取得する

メソッドの呼び出し元を取得する方法を調べました。

良くある方法はスタックトレースを見る方法です。

class MyClass {
    func originMethod() {
        targetMethod()
    }
    
    func targetMethod() {
        let symbols = NSThread.callStackSymbols()
        print(symbols.count >= 2 ? symbols[1] : "")
    }
}

以下のような形式で出力されるので少し加工が必要です。

1   MyApp                               0x000000010be1f242 _TFC5MyApp7MyClass12originMethodfT_T_ + 18

他にもデフォルト引数で#functionを受け取る方法もあります。

class MyClass {
    func originMethod() {
        targetMethod()
    }
    
    func targetMethod(originMethodName: String = #function) {
        print(originMethodName)
    }
}

こちらだとメソッド名がしっかり出てくれるので扱いやすいです。

targetMethod

参考URL

【Swift】メソッドがどこから呼ばれているかを知るTips - debug identifiers - - Qiita