zoukankan      html  css  js  c++  java
  • 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环境下,不进行打印.
  • 相关阅读:
    css 超出两行省略号,超出一行省略号
    css 去掉i标签默认斜体样式
    Spring 使用单选按钮
    Spring Maven工程引入css,js
    Sping 补充完成修改功能
    Spring 控制器层如何启用验证?
    Spring 控制器层如何调用DAO层
    spring boot工程如何启用 热启动功能
    Spring 视图层如何显示验证消息提示
    Sping POJO中如何添加验证规则和验证消息提示
  • 原文地址:https://www.cnblogs.com/coderwjq/p/6012177.html
Copyright © 2011-2022 走看看