- 自定義LOG的最終目的:讓打印信息在 DEBUG 的環(huán)境下打印,在 RELEASE 的環(huán)境下不打印
Swift中默認打印
- 當前Swift中的打印為 :
print("...")
-
默認打印的缺點:
-
print("...")
只能打印里面的內(nèi)容 - 無法定位具體文件
- 無法定位當前打印的方法
- 無法定位當前打印的行數(shù)
- 無法區(qū)分 DEBUG/RELEASE 環(huán)境谬墙,判斷是否打印,耗費性能
-
自定義Log
- 設置顯示打印當期文件
// 獲取文件位置
// #file 是系統(tǒng)提供的獲取當前文件的宏(Swift 3之后是#file 芯杀,之前為 __FILE__)。
let filePath = (#file as NSString).lastPathComponent
print(filePath)
--------打印結(jié)果為--------
ViewController.swift
- 定位當前方法
// 獲取當前方法
// #file 是系統(tǒng)提供的獲取當前方法的宏(Swift 3之后是#function ,之前為 __FUNCTION__)瘦赫。
let methodName = #function
print("\(filePath):\(methodName) - 我是原來打印")
--------打印結(jié)果為--------
ViewController.swift:viewDidLoad() - 我是原來打印
- 定位當前行數(shù)
// 獲取當前行數(shù)
// #line 是系統(tǒng)提供的獲取當前行數(shù)的宏(Swift 3之后是#line ,之前為 __LINE__)第队。
let lineNum = #line
print("\(filePath):\(methodName)第\(lineNum)行 - 我是原來打印")
--------打印結(jié)果為--------
ViewController.swift:viewDidLoad()第33行 - 我是原來打印
- 設置 DEBUG 宏谦疾,用于區(qū)分何時打印
此處需要在 Xcode -> target -> build settings 中搜索 swift flags
。并在 DEBUG 環(huán)境下添加 -D DEBUG
佃乘。添加一個 DEBUG 環(huán)境下叫 DEBUG 的宏囱井,如圖:
設置DEBUG flag.png
代碼中設置只在 DEBUG 環(huán)境下打印
// 獲取當前行數(shù)
// #line 是系統(tǒng)提供的獲取當前行數(shù)的宏(Swift 3之后是#line ,之前為 __LINE__)趣避。
let lineNum = #line
#if DEBUG
print("\(filePath):\(methodName)第\(lineNum)行 - 我是原來打印")
#endif
測試的話可以編輯 shame 中的 run 的環(huán)境
- 抽取成單獨公開的方法
以上四點已經(jīng)完成基本定位功能和只在DEBUG環(huán)境下打印的功能了庞呕。下面我們就來抽取成一個公開的方法,可以在項目中使用
func XYlog<T>(message : T ,file : String = #file , funName : String = #function , lineNum : Int = #line){
let filePath = (file as NSString).lastPathComponent
#if DEBUG
print("\(filePath):\(funName):\(lineNum)-\(message)")
#endif
}
【注意:】
- 方法的參數(shù)列表中
<T> message : T
是自定義的一個類型,這是一個泛型可以接收不同類型和數(shù)量的參數(shù)住练,并在下面使用 - 此自定義LOG是希望全局使用地啰,所以最好放到一個全局文件中設置成一個公開方法,推薦設置到AppDelegate.swift 中