美文网首页
swift - 实用Log 输出

swift - 实用Log 输出

作者: 31313_iOS | 来源:发表于2020-06-02 14:37 被阅读0次

在Swift中我们最常用的输出方法是使用print,在控制台输出一些字符串或者值,助于我们更好的了解程序的工作、程序运行中发生的一些变化、查看一些重要的数据输出等等。在程序比较简单的时候,我们要查找输出还是比较简单,但是对于复杂的程序和输出内容很多的时候,想要找到我们想看的数据其实就没有那么方便了。这时候我们就希望能够更精确的输出,比如包括输出的文件、调用的方法、调用的行号等。
当然我们也可以在输出的时候自己加上这些:

 func printTestMethod() {
     print("⽂件名:xxx.swift, ⽅法名:method,行号:[line]: 这是⼀条输出")
 }

但是这样确实很麻烦,每次输⼊⽂件名和⽅法名和行号,随着代码的修改,我们就要不停的需要维护这个输出,代价很大。
为了解决这个难题,就出现了今天要介绍的方式。

在Swift中,编译器为我们准备了⼏个很有⽤的编译符号,⽤来处理类似这样的需求,它们分别 是:

符号 类型 描述
#fie String 包含这个符号的⽂件的路径
#line Int 符号出现处的⾏号
#column Int 符号出现处的列
#function String 包含这个符号的⽅法名字

我们利用这写编译符号就可以定义出一个比较实用的Log输出方法:
func print_log<T>(_ message:T, file: String = #file, method: String = #function, line: Int = #line)

func print_log<T>(_ message:T, file: String = #file, method: String = #function, line: Int = #line) {
   print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)")
}

验证一下效果,在用户点击的时候输出看小效果:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(myView)
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print_log("这是一个自己定义的输出--")
        print("----------------------------")
        print("这是一个系统的输出--")
    }
输出结果为:
ViewController.swift[19], touchesBegan(_:with:): 这是一个自己定义的输出--
----------------------------
这是一个系统的输出--

当然我们很多时候希望 Release 版本中关闭所有的输出,那我们可以小优化一下, 用#if DEBUG --- code --- #endif

func print_log<T>(_ message:T, file: String = #file, method: String = #function, line: Int = #line) {
    #if DEBUG
    print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)")
    #endif
}

新版本的 LLVM 编译器在遇到这个空⽅法时,甚⾄会直接将这个⽅法整个去掉,完全不去调⽤ 它,从⽽实现零成本。

相关文章

  • swift - 实用Log 输出

    在Swift中我们最常用的输出方法是使用print,在控制台输出一些字符串或者值,助于我们更好的了解程序的工作、程...

  • swift中自定义Log

    swift中自定义log输出日志,swift支持全局函数,不写在任何类中的方法可以当做全局方法使用。这里写在了Ap...

  • APP开发实战128-APP Log功能设计

    31 Log功能设计 31.1Log输出控制 1 debug版本输出log,release版本不输出log A 通...

  • Swift2.0基本语法,数据类型

    标签(空格分隔): IOS-Swift [toc] 基本语法 print 向控制台输出文本log var 声明一个...

  • OC数组长度Count的符号与越界问题

    先看两个例子 会输出log吗 会输出log吗,会输出几次 答案第一个不会输出log,第二个会输出log,会打印非常...

  • swift 避免无必要的log输出

    1、添加flag:在Debug环境下添加flag,在Release条件下就会不满足。。。就不会调用 2、通过fla...

  • Golang log日志

    golang控制台输出log和两种将log输出到文件的方法 控制台输出 文件输出

  • shell echo命令

    echo命令与swift中的printf命令类似,都是用于一些log 的输出。 1.显示普通字符串 双引号也可以省...

  • Swift3.0之其他开发需要

    1.0自定义输出日志(log) 和OC不同的是,swift没有所谓的pch文件,即时新建了也产生不了什么作用,而且...

  • Swift中自定义Log

    Swift中自定义Log Swift中自定义Log:依次是类名.方法名.行号.内容. func LTLog(fun...

网友评论

      本文标题:swift - 实用Log 输出

      本文链接:https://www.haomeiwen.com/subject/vesuzhtx.html