前言
在開發(fā)過程中,難免會(huì)用到打印調(diào)試额衙,但是swift系統(tǒng)自帶的打印
print()方法饮焦,打印的數(shù)據(jù)有過于簡單,不利于調(diào)試入偷,特別是一個(gè)文件打印相同的追驴,會(huì)分不清哪里打印械哟,所以一般我們希望可以自定義打印方法疏之,獲得打印所在的文件和行號(hào)
01 系統(tǒng)的方法
#file 獲取打印所在文件的全路徑
#function 獲取打印所在的函數(shù)
#line 獲取打印所在的行
02 具體方法
#file 所在的路徑是整個(gè)全路徑,但是我們只要是文件路徑就可以
let file = #file
print(file)
結(jié)果:
/Users/sjq/Desktop/swift/08 自定義Log/AppDelegate.swift
通過NSString的一個(gè)方法暇咆,獲取獲取最后的節(jié)點(diǎn)
let file = (#file as NSString).lastPathComponent
print(file)
結(jié)果:
AppDelegate.swift
03 封裝為函數(shù)
一般在把自定義打印封裝為一個(gè)函數(shù)锋爪,方便使用
func LXLog(file:String,funcName:String,Line:Int){
print("\(fileName):[\(funcName)](\(Line))
}
使用
let file = (#file as NSString).lastPathComponent
let funcName = #function
//let line = #line
//注意line不要提前獲取,否則打印出的是獲取line的那一行號(hào)爸业,不是打印所在的行號(hào) LXLog(file: file, funcName: funcName, Line: #line)
但是這樣寫的話其骄,比較麻煩,每次打印扯旷,都需要獲取函數(shù)名 文件名和 行號(hào)拯爽,可以通過函數(shù)的默認(rèn)參數(shù)來解決
func LXLog(file : String = #file,funcName:String = #function,Line:Int = #line) {
let fileName = (file as NSString).lastPathComponent
//print("\(fileName):[\(funcName)](\(Line))")
print("\(fileName):(\(Line))")
}
使用
LXLog()
打印結(jié)果
AppDelegate.swift:[application(_:didFinishLaunchingWithOptions:(32)
一般使用的時(shí)候,不會(huì)把函數(shù)名稱打印出來钧忽,因?yàn)楦鶕?jù)文件名和行號(hào)就可以確定打印在哪里了
所以上面的函數(shù)中打印可以寫成
print("\(fileName):(\(Line))")
打印結(jié)果
AppDelegate.swift:(32)
至此系統(tǒng)信息打印完畢毯炮,但是我們需要添加我們自己的打印信息
可能打印字符串 數(shù)字 等類型
所以可以通過泛型高級(jí)用法逼肯,動(dòng)態(tài)的獲取打印類型
在函數(shù)名稱后面添加<T> T可以自己定義,函數(shù)中添加一個(gè)類型為動(dòng)態(tài)T類型的message,這樣就可以自己傳自己想打印的信息了
寫法
func LXLog<T>(message:T,file : String = #file,funcName:String = #function,Line:Int = #line) {
let fileName = (file as NSString).lastPathComponent
print("\(fileName)(\(Line))- \(message)")
}
使用
LXLog(message: "124")
結(jié)果
AppDelegate.swift(29)- 124
定義好函數(shù)后就可以在本文件中使用了桃煎,但是開發(fā)中如果希望在所有文件中篮幢,都可以使用自定義打印
這時(shí)候需要swift中的全局函數(shù)
就把上面的函數(shù)不要寫法具體的類中,寫到類實(shí)現(xiàn)外面为迈,一般都寫著
Appdelegate中
注意:一定要寫在class 方法外三椿,至此自定義打印完成
最后的函數(shù),使用可以直接復(fù)制到項(xiàng)目葫辐,即可完成自定義打印
func LXLog<T>(message:T,file : String = #file,funcName:String = #function,Line:Int = #line) {
let fileName = (file as NSString).lastPathComponent
print("\(fileName)(\(Line))- \(message)")
}