最近在開發(fā)swift經(jīng)常使用printf來打印圈纺,大家都知道打印是一件很耗性能的事情战坤,在OC中有 NSLog(format, ...) 自定義Log(format, ##VA_ARGS) 的宏可以使用接谨,在swift中該怎么辦呢总放,網(wǎng)上也有第三方的log但是本著減少對第三方的依賴的想法我們來自定義Log
自定義Log
首先我們新建一個類寫一個公共的泛型函數(shù)
public func ZMLogs<T>(debug: T, _ file: String = #file , _ function: String = #function, _ line: Int = #line) {
if(ZMLogsManger.enabled)
{
//let fileExtension = file.ns.lastPathComponent.ns.pathExtension
let filename = file.ns.lastPathComponent.ns.stringByDeletingPathExtension
print("\(filename):\(function):[\(line)]\(debug)")
}
}
我來解釋一下:
-
#file 獲取方法調(diào)用者所在的文件路徑
-
#function 獲取方法調(diào)用者所在的方法名
-
#line 獲取所在的行數(shù)
在寫一個結(jié)構(gòu)體侄非,里面就一個屬性用來管理Log是否開啟
public struct ZMLogsManager {
//是否開啟調(diào)試
public static var enabled = true
}
注意:是否開啟調(diào)試要放在AppDelegate里面設(shè)置
好接下來我們在ViewController里寫
運行看控制臺
是不是很簡單呢這是最基本的功能窥妇,以后會繼續(xù)擴展功能屿脐,在這里下載代碼
另一種方法:
不寫ZMLogsManager疯淫,去自定義comstom flags
輸入-D DEBUG
現(xiàn)在就可以在代碼加上
public func ZMLogs<T>(debug: T, _ file: String = #file , _ function: String = #function, _ line: Int = #line) {
#if DEBUG
let filename = file.ns.lastPathComponent.ns.stringByDeletingPathExtension
print("\(filename):\(function):[\(line)]\(debug)")
#endif
}
這種方式也是可以的是不是更高大上了呢