無顏色打印
為了項目中的及時的調試,我們通常都會打印網絡請求的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
- 選中Run 選中Arguments 在Environment Variables中添加XcodeColors 值為YES,添加的內容全部為手寫,沒有智能提示,要大膽自信的寫.只要跟我寫的一樣,馬上就打印出優雅美觀的顏色輸出來.
經過以上三步,接下來就Xcode控制臺輸出就任由你下令,發揮你的想象輸出想要的任何顏色.它能讓你臨時添加的一個調試打印信息,在眾多常規性的項目輸出信息中脫穎而出.正如星爺電影里說的,沒用的,你那樣出色的打印無論在哪,都像黑夜里的螢火蟲那樣的鮮明.
進階使用
1,快速查找特定打印信息
例如上面的例子中點擊了語音搜索界面
這條打印信息,我是臨時想看看按鈕點擊監聽是否真的成功.
如果沒有顏色打印我需要在眾多打印信息中,所有文字都一個顏色魚龍混雜,拖動右側的滾動條上下翻找點擊了語音搜索界面
這幾個字.
// 常規打印
print("點擊了語音搜索界面")
而有了顏色之后,我可以對點擊了語音搜索界面
這個打印使用我自己訂制的顏色.程序運行之后我只需要在控制臺找紅色即可,方便快捷.
// 使用特定的紅色打印
ColorLog.red("點擊了語音搜索界面")
2,常規打印分類顯示,不同顏色區分不同主體
我們的項目中每次都要對請求的URl和響應的data打印.因此我封裝網絡請求工具類的時候統一對URL打印為藍色,data打印為綠色.同時定義了一個輸出兩種顏色的打印函數,墨藍色為控制器名稱,藍色為請求的URL.利用這樣控制臺顯得更加干凈利落
ColorLog.darkBlueAndLightBlue("[\(self.classForCoder)]---------" , obj2: urlString.joinActionAndParams())