Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
32
Help us understand the problem. What is going on with this article?
@mshrwtnb

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

More than 3 years have passed since last update.

あるメソッドが、どのメソッドから呼ばれているのか気になるときがあります。
ファイルを辿っていけば最終的には見つかりますが、複数のメソッドを同時並行で追うのはなかなか面倒です。
そんなとき、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を受け取れば良いままです。

autocomplete.png

参考

The Swift Programming Language (Swift 2.2)

32
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
globis
グロービスは 1992 年の創業以来、社会人を対象とした MBA、人材育成の領域で Ed-Tech サービスを提供し、現在は日本 No.1 の実績があります。これらの資産と、さらに IT や AI を活用することで、アジア No.1 を目指しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
32
Help us understand the problem. What is going on with this article?