11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SwiftAdvent Calendar 2022

Day 17

いまさらだけど#fileとかについて(Swift)

Last updated at Posted at 2022-12-17

Xcode-14.1 Swift-5.7.1

はじめに

こちらの記事を参考に下記のようなテストを書いているときにふと #line みたいなやつって #file とかあった気がするけど他にもなんかあったけ?と気になりました:thinking:

func testHogeWithFlagMethod() {
    let testCases: [(line: UInt, flag: Bool, expect: Int)] = [
        (#line, true, 0),
        (#line, false, 1)
    ]
    testCases.forEach {
        XCTAssertEqual(hoge(flag: $0.flag), $0.expect, line: $0.line)
    }
}

ということで #file とかのまとめです。

一覧

下記があるみたいです。

Literal Type Value
#file String ファイルパス
#fileID String ファイル名とモジュール名
#filePath String ファイルパス
#line Int 行番号
#column Int 列番号
#function String 関数名
#dsohandle UnsafeRawPointer The dynamic shared object (DSO) handle in use where it appears. (原文ママ)

参考:Swift - Language Reference - Expressions

#dsohandle に関してはよくわかりませんでした:see_no_evil:

デスクトップに Hoge というプロジェクトを作成し下記を実行すると

print1

こうなりました。

file: /Users/am10/Desktop/Hoge/Hoge/ViewController.swift
fileID: Hoge/ViewController.swift
filePath: /Users/am10/Desktop/Hoge/Hoge/ViewController.swift
line: 17
column: 26
function: viewDidLoad()

#file は現状は #filePath と同じ動作で将来的には #fileID と同じ動作になる模様。

使い方

下記のようにデフォルト引数を設定すると呼び出し元の値が取得できます。

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

参考:Swift - Language Reference - Expressions

下記のようなメソッドを作ります(今回は PrintLog.swift というファイルを作ってそこに書きました)。

func printLog(filePath: String = #filePath,
              line: Int = #line,
              column: Int = #column,
              functionName: String = #function) {
    print("filePath: \(filePath)", "line: \(line)", "column: \(column)", "function: \(functionName)", separator: "\n")
}

こんな感じで呼び出すと

print2

こうなります。

filePath: /Users/am10/Desktop/Hoge/Hoge/ViewController.swift
line: 13
column: 17
function: piyo
piyo
filePath: /Users/am10/Desktop/Hoge/Hoge/ViewController.swift
line: 19
column: 17
function: fuga()

おわりに

たまにしか使わないですがログ表示とかで使うと便利です:thumbsup:

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?