Swift中自定义Log打印方法

系统如何调用super方法

系统默认只会在构造函数中,自动调用super.init()方法,而且是在所写方法的尾部进行调用.

在其他函数中,如何需要调用父类的默认实现,都需要手动去实现.

如果在构造函数中使用KVC,一定要先调用父类的super.init()方法.

自定义Log的方法

以下语法为swift3的最新语法

  • 获取打印所在的文件
    • let file = (#file as NSString).lastPathComponent
  • 获取打印所在的方法
    • let funcName = #functon
  • 获取打印所在的行
    • let lineNum = #line

swift中有全局函数的概念:即将函数定义在项目中任意一个类文件的class外面,就可以在项目中的任何地方均可以调用这个方法.

自定义Log方法就是基于swift的全局函数来实现的.

另外,自定义log的时候,要考虑到在debug环境下进行打印,而在release环境下不需要进行打印.

由于swift中没有宏定义的概念,所以需要在项目的Build Settings->Other Swift Flags中为Debug添加一个标记,例如"-D DEBUG".

这样,在代码中,可以直接通过"DEBUG"这个关键词,来判断当前的运行环境是否为debug模式.

下面为自定义的Log方法:

func WJQLog<T>(_ messsage : T, file : String = __FILE__, funcName : String = __FUNCTION__, lineNum : Int = __LINE__) {
    
    #if DEBUG
    
    let fileName = (file as NSString).lastPathComponent
    
    print("\(fileName):(\(lineNum))-\(messsage)")
    
    #endif
}

// 调用代码如下:
WJQLog("test")

解释:

  • 考虑到自定义Log要打印方法所在的文件/方法名/行号,以及自定义的内容,同时考虑调用的便捷性,所以要使用默认参数,无需调用者传递太多的参数.
  • 使用泛型,可以让调用者传递任意的类型,进行打印Log的操作.
  • #if DEBUG和#endif用来判断,只有在debug环境下,才执行Log里面的代码进行打印操作.在release环境下,不进行打印.
posted @ 2016-10-29 23:23  喳喳的夏天  阅读(2001)  评论(0编辑  收藏  举报