iOS开发 Objective-CiOS开发 Swift

Swift 4 自定义(可变参数) print()函数

2019-08-14  本文已影响0人  落花人独立_微雨燕双飞
image

配置文件

配置文件

函数调用结果

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        // 调用
        let a = 2
        printLog(a)
        
//        // 打印结果:
//        [文件名]:[ViewController.swift]
//        [方法名]:[viewDidLoad()]
//        [行号]:[27]
//        2

      
        
        // 调用可变参数打印函数
        JJLog(0, "abc", [1,2,3], "打印测试")
        
//        // 打印结果:
//        [文件名]:[ViewController.swift]
//        [方法名]:[viewDidLoad()]
//        [行号]:[31]
//        0 abc [1, 2, 3] 打印测试

        
        
    }
}



1.自定义单参数打印函数

定义 全局函数 添加#if DEBUG #endif 判断



// MARK: - 全局函数 (class外面写的是全局函数)
// MARK: - 自定义打印函数

/// 单参数打印函数
///
/// - Parameters:
///   - message:打印
///   - file: 文件名,默认值:#file
///   - line: 第几行,默认值:#line
///   - function: 函数名,默认值:#function
func printLog(_ message: Any,
              file: String = #file,
              function: String = #function,
              line: Int = #line)
{
    #if DEBUG
    
    print("\n[文件名]:[\((file as NSString).lastPathComponent)]\n[方法名]:[\(function)]\n[行号]:[\(line)]\n\(message)\n")
    
    #endif
}







2.自定义(可变参数)打印函数

定义 全局函数 添加#if DEBUG #endif 判断






// MARK: - 全局函数 (class外面写的是全局函数)
// MARK: - 自定义(可变参数)打印函数

/// 全局函数 自定义(可变参数)打印函数
///
/// - Parameters:
///   - items: 项目:要打印的零个或多个项目。
///   - separator: 分隔符:要在每个项目之间打印的字符串。默认值是单个空格(" ")。
///   - terminator: 终止符:打印完所有项目后要打印的字符串。默认值是换行符 \n ("\n")。
///   - file: 调用打印方法时 打印方法所在文件的文件路径
///   - function: 当前方法名
///   - line: 当前行号
func JJLog(_ items: Any...,
    separator: String = " ",
    terminator: String = "\n",
    file: String = #file,
    function: String = #function,
    line: Int = #line)
{
    
    #if DEBUG
    
    // 方法一
    
    //    // 由于items是一个数组,所以打印出来最外层会是一个大括号[].
    //    // 如果不怕打印结果有大括号[4, "abc", [1, 2, 3]],可以直接一句话写成这样.
    //    print("\n[文件名]:[\((file as NSString).lastPathComponent)]\n[方法名]:[\(function)]\n[行号]:[\(line)]\n", items)

    
    // 方法二
    
    let filenime = (file as NSString).lastPathComponent

    // print函数,每行末尾默认添加终止符terminator.终止符的默认值是 换行符"\n";
    // 所以不用再手动添加terminator终止符,也不用再print函数的末尾手写"\n".
    // 如果需要多加上一个换行符,就在末尾手写"\n"
    print("\n[文件名]:[\(filenime)]\n[方法名]:[\(function)]\n[行号]:[\(line)]")

    var i = 0
    let j = items.count
    for item in items {
        i += 1

        // 重点:
        // 当有多个需要打印的参数时,通过三目运算符判断 终止符terminator 此时的实际值
        //   - separator: 分隔符:要在每个项目之间打印的字符串。默认值是单个空格(" ")。
        //   - terminator: 终止符:打印完所有项目后要打印的字符串。默认值是换行符 \n ("\n")。
        print(item, terminator: i == j ? terminator: separator)

    }
    
    //换行,即打印一个空行.
    print()
    
    #endif
    
}




官方文档

https://developer.apple.com/documentation/swift/1539920-debugprint

功能

将最适合调试的给定项的文本表示写入标准输出。

debug Print(_:separator:terminator :)

宣言

func debugPrint(_ items: Any..., separator: String = " ", terminator: String = "\n")

参数

items

要打印的零个或多个项目。

separator

要在每个项目之间打印的字符串。默认值是单个空格(" ")。

terminator

打印完所有项目后要打印的字符串。默认值是换行符 \n ("\n")。

讨论

您可以将零个或多个项目传递给该函数。每个项目的文本表示与通过调用获得的相同。以下示例将字符串的调试表示形式,闭合的整数范围和一组浮点值打印到标准输出:

debugPrint(_:separator:terminator:)String(reflecting: item)

debugPrint("One two three four five")
// Prints "One two three four five"

debugPrint(1...5)
// Prints "ClosedRange(1...5)"

debugPrint(1.0, 2.0, 3.0, 4.0, 5.0)
// Prints "1.0 2.0 3.0 4.0 5.0"

要打印由空格以外的其他内容分隔的项目,请将字符串作为separator。

debugPrint(1.0, 2.0, 3.0, 4.0, 5.0, separator: " ... ")
// Prints "1.0 ... 2.0 ... 3.0 ... 4.0 ... 5.0"

每个调用的输出默认包含换行符。要打印没有尾随换行符的项目,请将空字符串作为。debugPrint(_:separator:terminator:)terminator

for n in 1...5 {
    debugPrint(n, terminator: "")
}
// Prints "12345"

也可以看看

印刷和倾倒


func print(Any, separator: String, terminator: String)
将给定项的文本表示写入标准输出。

func print<Target>(Any, separator: String, terminator: String, to: inout Target)
将给定项的文本表示写入给定的输出流。

func debugPrint<Target>(Any, separator: String, terminator: String, to: inout Target)
将最适合调试的给定项的文本表示写入给定的输出流。

func dump<T>(T, name: String?, indent: Int, maxDepth: Int, maxItems: Int) -> T
使用镜像将给定对象的内容转储到标准输出。

func dump<T, TargetStream>(T, to: inout TargetStream, name: String?, indent: Int, maxDepth: Int, maxItems: Int) -> T
使用其镜像将给定对象的内容转储到指定的输出流。

参考

https://www.cnblogs.com/liuyongfa/p/9519311.html

上一篇下一篇

猜你喜欢

热点阅读