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
使用其镜像将给定对象的内容转储到指定的输出流。