诉求
-
美化控制台的内容输出,不要杂乱无章。
-
对不同的输出内容,有不同的区分标志。
-
执行打印的基础信息(文件名,行数,函数名)。
-
针对字典和数组的输出像OC一样直观一些。
-
针对网络请求(请求地址,参数,返回值)能一起打印。
这是我们最终输出的样式
? ======================= ?
? ViewController.swift[28]: 各种数据类型()
1
? ViewController.swift[31]: 各种数据类型()
1.0
✏️ ViewController.swift[34]: 各种数据类型()
这个是一个字符串
? ViewController.swift[37]: 各种数据类型()
2021-07-13 03:44:31 +0000
☝️ ======================= ☝️
? ======================= ?
? ViewController.swift[51]: 字典()
{
A = alfa;
B = bravo;
C = charlie;
D = delta;
E = echo;
F = foxtrot;
}
? ViewController.swift[59]: 字典()
{
A = alfa;
B = bravo;
C = charlie;
D = delta;
E = {
A = alfa;
B = bravo;
C = charlie;
D = delta;
E = echo;
F = foxtrot;
};
F = {
A = alfa;
B = bravo;
C = charlie;
D = delta;
E = echo;
F = foxtrot;
};
}
☝️ ======================= ☝️
? ======================= ?
? ViewController.swift[69]: 数组()
(
1,
2,
3,
4,
5,
6
)
? ViewController.swift[78]: 数组()
(
1,
(
1,
2,
3,
4,
5,
6
),
{
A = alfa;
B = bravo;
C = charlie;
D = delta;
E = echo;
F = foxtrot;
}
)
☝️ ======================= ☝️
? ======================= ?
? ViewController.swift[86]: 网络请求()
https//:www.baidu.com
? ViewController.swift[92]: 网络请求()
{
key1 = value1;
key2 = value2;
key3 = value3;
}
? ViewController.swift[100]: 网络请求()
{
A = alfa;
B = bravo;
C = charlie;
D = delta;
E = echo;
F = foxtrot;
}
☝️ ======================= ☝️
复制代码
实现
import UIKit
public enum BTPrint {
/// 字符串✏️
case text(String)
/// 字典?
case dictionary([String: Any])
/// 数组?
case array([Any])
/// 颜色 ?
case color(UIColor)
/// URL?
case url(String)
/// Error❌
case error(NSError)
/// Date?
case date(Date)
/// obj?❤️??
case obj(AnyObject)
/// any ?
case any(Any)
/// 分割线?
case beforeLine
/// 分割线☝️
case afterLine
// 执行打印
public func print(file: String = #file,
method: String = #function,
line: Int = #line) {
let sign = "\((file as NSString).lastPathComponent)[\(line)]: \(method)"
let emjio = getEmjio()
let content = getContent()
switch self {
case .beforeLine:
let allStr = "\n" + emjio + content + emjio
Swift.print(allStr)
case .afterLine:
let allStr = emjio + content + emjio + "\n"
Swift.print(allStr)
default:
let allStr = emjio + sign + "\n" + content + "\n"
Swift.print(allStr)
}
}
}
extension BTPrint {
private func getEmjio() -> String {
switch self {
case .text(_):
return "✏️ "
case .dictionary(_):
return "? "
case .array(_):
return "? "
case .color(_):
return "? "
case .url(_):
return "? "
case .error(_):
return "❌ "
case .date(_):
return "? "
case .obj(_):
return "?❤️?? "
case .any(_):
return "? "
case .beforeLine:
return "? "
case .afterLine:
return "☝️ "
}
}
private func getContent() -> String {
func content<T>(_ object: T) -> String {
let temp = "\(object)"
return temp
}
switch self {
case .color(let color):
return content(color)
case .text(let line):
return content(line)
case .url(let url):
return content(url)
case .error(let error):
return content(error)
case .any(let any):
return content(any)
case .obj(let obj):
return content(obj)
case .date(let date):
return content(date)
case .dictionary(let dict):
return content("\(String(describing: dict as AnyObject))")
case .array(let arr):
return content("\(String(describing: arr as AnyObject))")
case .beforeLine, .afterLine:
return content("======================= ")
}
}
}
复制代码
其他
在 macOS上快速打开表情包 Ctrl + Command + Space 。 官方介绍
设置debug下才print
- 选中Target
- 选择你的项目名称
- 选择 build Settings
- 搜索 Compiler Flag
- 展开 Other C Flags
- 双击Debug, 点击 +
- 输入 -D DEBUG
#if DEBUG
Swift.print(allStr)
#endif
复制代码
参考
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END