Swift如何带颜色打印

无颜色打印

为了项目中的及时的调试,我们通常都会打印网络请求的URL信息,以及网络响应的字符串信息.而由于客户端和服务端信息交互无时不刻都在发生着,所以通常程序一启动,xcode控制台就抛出一大堆的打印信息.如果再点击跳转多几个页面,那Xcode控制台简直没法直视了,如下图.

没有颜色打印各种信息难以区分

带颜色打印

因此我一直就想着能不能通过不同颜色来分门别类的打印.这样让我们开发者很直观就能在众多的信息中找到我们需要的调试信息,如下图.

同样的打印信息加以颜色区别的效果

安装步骤

1,安装XcodeColors插件.

下载XcodeColors插件,解压缩并运行.如果在github中搜索XcodeColors结果较多,我用的是robbiehanson的.如果安装了Alcatraz,通过插件安装更方便,直接搜索XcodeColors,搜索结果只有一个,安装即可.

2,定义全局常量

安装后重启Xcode,本质上带颜色打印,XcodeColors是通过识别打印信息中固定字符让Xcode输出对应的颜色.为了使用方便,我们就定义全局变量,跟在OC中定义宏是一个意思.具体代码如下,在swift中一下代码写在任意地方都可以,我是创建一个叫QGLog的文件专门来放各种颜色输出的函数.

// 带颜色输出
struct ColorLog {
    // 决定颜色输出的标识
    static let ESCAPE = "\u{001b}["
    // 决定前景色还是背景色
    static let RESET_FG = ESCAPE + "fg;" // Clear any foreground color
    static let RESET_BG = ESCAPE + "bg;" // Clear any background color
    static let RESET = ESCAPE + ";"   // Clear any foreground or background color
    
    // 红色输出
    static func red<T>(object: T) {
        print("\(ESCAPE)fg212,84,0;\(object)\(RESET)")
    }
    
    // 绿色输出
    static func green<T>(object: T) {
        #if DEBUG
            let scanner = NSScanner(string: "0x1f448")
            var result: UInt32 = 0
            scanner.scanHexInt(&result)
            let emoji = "\(Character(UnicodeScalar(result)))"
            print(emoji+"\(ESCAPE)fg38,173,97;\(object)\(RESET)")
        #endif
    }
    
    // 蓝色输出
    static func blue<T>(object: T) {
        #if DEBUG
            print("\(ESCAPE)fg0,0,255;\(object)\(RESET)")
        #endif
    }
    
    //黄色输出
    static func yellow<T>(object: T) {
        #if DEBUG
        print("\(ESCAPE)fg242,196,15;\(object)\(RESET)")
        #endif
    }
    
    //紫色输出
    static func purple<T>(object: T) {
        #if DEBUG
        print("\(ESCAPE)fg255,0,255;\(object)\(RESET)")
        #endif
    }
    
    //青色输出
    static func cyan<T>(object: T) {
        #if DEBUG
        print("\(ESCAPE)fg0,255,255;\(object)\(RESET)")
        #endif
    }
    
    // 打印两个对象分别蓝色和黄色输出
    static func blueAndYellow<T>(obj1:T,obj2:T) {
        #if DEBUG
            print("\(ESCAPE)fg0,0,255;\(obj1)\(RESET)" + "\(ESCAPE)fg255,255,0;\(obj2)\(RESET)")
        #endif
    }
    
    // 亮蓝色输出
    static func lightBlue<T>(obj1:T) {
        #if DEBUG
            let scanner = NSScanner(string: "0x1f449")
            var result: UInt32 = 0
            scanner.scanHexInt(&result)
            let emoji = "\(Character(UnicodeScalar(result)))"
            print(emoji+"\(ESCAPE)fg41,128,185;\(obj1)\(RESET)")
        #endif
    }
}
3,定义环境变量

虽然本质上是可以让Xcode根据我们在打印信息中添加的额外字符来输出不同颜色的文字了.但是第一次集成的时候怎么都不能成功打印出漂亮的颜色来.github上的使用描述也没说为什么.原来是需要定义一个环境变量来链接Xcode工具和XcodeColors插件.

  • 在项目的target下点击Edit Scheme
编辑Scheme
  • 选中Run 选中Arguments 在Environment Variables中添加XcodeColors 值为YES,添加的内容全部为手写,没有智能提示,要大胆自信的写.只要跟我写的一样,马上就打印出优雅美观的颜色输出来.
添加环境变量的界面

经过以上三步,接下来就Xcode控制台输出就任由你下令,发挥你的想象输出想要的任何颜色.它能让你临时添加的一个调试打印信息,在众多常规性的项目输出信息中脱颖而出.正如星爷电影里说的,没用的,你那样出色的打印无论在哪,都像黑夜里的萤火虫那样的鲜明.

进阶使用

1,快速查找特定打印信息

例如上面的例子中点击了语音搜索界面这条打印信息,我是临时想看看按钮点击监听是否真的成功.
如果没有颜色打印我需要在众多打印信息中,所有文字都一个颜色鱼龙混杂,拖动右侧的滚动条上下翻找点击了语音搜索界面这几个字.

// 常规打印
print("点击了语音搜索界面")

而有了颜色之后,我可以对点击了语音搜索界面这个打印使用我自己订制的颜色.程序运行之后我只需要在控制台找红色即可,方便快捷.

// 使用特定的红色打印
ColorLog.red("点击了语音搜索界面")
2,常规打印分类显示,不同颜色区分不同主体

我们的项目中每次都要对请求的URl和响应的data打印.因此我封装网络请求工具类的时候统一对URL打印为蓝色,data打印为绿色.同时定义了一个输出两种颜色的打印函数,墨蓝色为控制器名称,蓝色为请求的URL.利用这样控制台显得更加干净利落

发送请求打印两个对象,两种颜色输出
请求响应data使用绿色,层次分明
ColorLog.darkBlueAndLightBlue("[\(self.classForCoder)]---------" , obj2: urlString.joinActionAndParams())
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,080评论 4 62
  • github排名https://github.com/trending,github搜索:https://gith...
    小米君的demo阅读 4,576评论 2 38
  • 摘要:作者从读书时期学习成绩的变化引出了一个问题:自己的想法可以决定自己的世界是怎样的。这就是这在心理学界有是一个...
    悦诗LY阅读 219评论 0 0
  • ——你给的,未必是他想要的 记得初学心理学的时候,总以为自己学的很好了,学了一些理论,懂了一些...
    脁登阅读 1,111评论 0 5
  • 刚刚看完毛姆的《面纱》,这本书是微信好友赠我的微信读书中的一本,看完后被他深深地震撼,说不出的感觉,毛姆的书总是对...
    艾米姜阅读 528评论 0 0