swift怎么自定义Log

最近在开发swift经常使用printf来打印,大家都知道打印是一件很耗性能的事情,在OC中有 NSLog(format, ...) 自定义Log(format, ##VA_ARGS) 的宏可以使用,在swift中该怎么办呢,网上也有第三方的log但是本着减少对第三方的依赖的想法我们来自定义Log


自定义Log

首先我们新建一个类写一个公共的泛型函数

public func ZMLogs(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)")
}

}

我来解释一下:

  1. #file 获取方法调用者所在的文件路径
  2. #function 获取方法调用者所在的方法名
  3. #line 获取所在的行数

在写一个结构体,里面就一个属性用来管理Log是否开启

public struct ZMLogsManager {

    //是否开启调试
     public static var enabled = true

}

注意:是否开启调试要放在AppDelegate里面设置

好接下来我们在ViewController里写

swift怎么自定义Log_第1张图片
打印

运行看控制台

swift怎么自定义Log_第2张图片
控制台

是不是很简单呢这是最基本的功能,以后会继续扩展功能,在这里下载代码

另一种方法:

不写ZMLogsManager,去自定义comstom flags

swift怎么自定义Log_第3张图片
自定义
swift怎么自定义Log_第4张图片
输入-D DEBUG

输入-D DEBUG

现在就可以在代码加上

public func ZMLogs(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
}

这种方式也是可以的是不是更高大上了呢

你可能感兴趣的:(swift怎么自定义Log)