はじめに
こちらの記事を参考に下記のようなテストを書いているときにふと #line
みたいなやつって #file
とかあった気がするけど他にもなんかあったけ?と気になりました
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
に関してはよくわかりませんでした
デスクトップに Hoge というプロジェクトを作成し下記を実行すると
こうなりました。
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")
}
こんな感じで呼び出すと
こうなります。
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()
おわりに
たまにしか使わないですがログ表示とかで使うと便利です