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())
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,180評論 4 61
  • github排名https://github.com/trending,github搜索:https://gith...
    小米君的demo閱讀 4,777評論 2 38
  • 摘要:作者從讀書時期學習成績的變化引出了一個問題:自己的想法可以決定自己的世界是怎樣的。這就是這在心理學界有是一個...
    悅詩LY閱讀 230評論 0 0
  • ——你給的,未必是他想要的 記得初學心理學的時候,總以為自己學的很好了,學了一些理論,懂了一些...
    脁登閱讀 1,132評論 0 5
  • 剛剛看完毛姆的《面紗》,這本書是微信好友贈我的微信讀書中的一本,看完后被他深深地震撼,說不出的感覺,毛姆的書總是對...
    艾米姜閱讀 554評論 0 0