Swift之自定義debug階段控制臺打印

本文講解在使用最新的Swift3.0語言進行ios開發(fā)的debug打印功能,并與Objective-C語言作對比。
進行ios開發(fā)伊始帐姻,自然少不了要首先對項目進行各方面的配置,比如導入框架奶段、配置info.plist饥瓷、自定義后臺打印等等,接下來首先使用Objective-C語言自定義后臺打印痹籍,之后使用Swift3.0呢铆。
Objective-C語言:
首先要在項目中創(chuàng)建pch文件,使用command+n快捷鍵彈出新建文件窗口并選擇pch文件:



之后配置項目將pch文件作為全局文件:



上圖第5步中是設置prefix header文件的相對路徑蹲缠,路徑是從項目的根目錄下的第一個目錄開始直到pch文件
接下來就是在pch文件中實現自定義log的方法(當然還有一些全局變量的定義和預編譯棺克,此處不作說明),代碼如下:

ifdef DEBUG#define YTLog(...) NSLog(@"%s\n %@\n\n", func, [NSString stringWithFormat:VA_ARGS])//真機測試顯示打印的格式#define YTRLog(FORMAT, ...) fprintf(stderr,"%s:%d %s\n\n",[[[NSString stringWithUTF8String:FILE] lastPathComponent] UTF8String], LINE, [[NSString stringWithFormat:FORMAT, ##VA_ARGS] UTF8String]);#else#define YTRLog(FORMAT, ...)#endif

有興趣的同學可以試著調用這個自定義的log打印結果
下面介紹Swift自定義log的方法:
與OC不同的是线定,Swift沒有所謂的pch文件娜谊,即時新建了也產生不了什么作用,而且Swift3.0也沒有預編譯命令#define斤讥,只能通過最新的語法來實現自定義log纱皆。
首先依然是項目的配置,但卻不是配置pch文件的路徑芭商,而是定義調試階段的flag變量派草,如圖:



上圖中,在步驟5中寫入編譯階段debug的標識符铛楣,這里寫入了和OC一樣的標識符近迁,之后就可以利用這個DEBUG標識符進行debug階段的判斷,從而杜絕Release階段的后臺打印蛉艾。
然后钳踊,我們在項目中新建一個Swift的頭文件,可以在該文件中進行一些全局變量和全局函數的聲明和實現:



在這里勿侯,我將該Swift頭文件命名為“SwiftPch”拓瞪,因為這個文件是和OC的pch文件起著類似的作用,然后在該頭文件中助琐,可以使用let丈钙、var怎爵、fun等關鍵字聲明一些全局變量和函數等,這里,我只做與自定義log有關的函數定義與實現:
//自定義調試階段log func delog(filePath: String = #file, rowCount: Int = #line) { #if DEBUG let fileName = (filePath as NSString).lastPathComponent.replacingOccurrences(of: ".Swift", with: "") print(fileName + "/" + "(rowCount)" + "\n") #endif } func delog<T>(_ message: T, filePath: String = #file, rowCount: Int = #line) { #if DEBUG let fileName = (filePath as NSString).lastPathComponent.replacingOccurrences(of: ".Swift", with: "") print(fileName + "/" + "(rowCount)" + " (message)" + "\n") #endif }

這里角撞,我實現了兩個自定義log的函數,一個是可以不帶打印信息參數的丽蝎,一個是需要帶打印信息參數的飒房。該函數的實現使用了Swift泛型的概念,因為我們知道需要打印的信息是任意類型的變量葱轩,而不僅僅是字符串睦焕。
在系統(tǒng)的打印函數print中只是單純攜帶了需要打印的信息。而不包含任何其他信息靴拱,這對于一個龐大的項目來說是遠遠不夠的垃喊,相較于OC語言的打印函數NSLog中攜帶了時間信息,我們仍然需要一些對我們調試程序和定位bug十分有用的信息袜炕,比如文件名本谜、調用的函數名以及打印的代碼的所在行數等等,至于時間信息偎窘,其實對于我們來說是完全無用的乌助,我們完全可以用另一個強大的Xcode自帶調試工具Time profile來分析代碼的運行時間。在Swift3.0中评架,文件名眷茁、函數名、代碼函數這些信息分別使用代碼#file纵诞、#function上祈、#line來實現,返回的類型分別是Swift的內置類型String浙芙、String和Int登刺。
在本例中,我只使用了#file嗡呼、#line這兩個額外信息纸俭,因為對于#function來說,#line已經完全能夠定位到代碼的執(zhí)行地點南窗,#function未免過于冗長和多余揍很,當然郎楼,這個只是個人偏好的問題,可以帶上也不可以選擇不帶上窒悔。在上例的函數中呜袁,我使用了自己配置的debug階段的標識符DEBUG,能夠在函數執(zhí)行后简珠,在debug階段打印想要的信息阶界,在Release階段則什么都不做。另外聋庵,此處我對#file這個String變量做了額外的處理膘融,在Swift中,#file是會返回一個文件所在的絕對路徑祭玉,這個路徑過于冗長氧映,我們只需要其最后一個路徑即可,也就是先將其轉換為OC類型NSString脱货,再截取最后一個路徑屯耸,之后,我刪除了最后文件名中的所有“.Swift”后綴蹭劈,最終在大多數情況下我就只得到該文件名的類名疗绣。通過以上函數,最終我得到的打印輸出是這樣的:
delog()delog(1)delog("1")playground31/15playground31/16 1playground31/17 1

上3行是調用打印函數铺韧,下3行是控制臺輸出多矮,怎么樣,是不是看起來清爽很多哈打?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末塔逃,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子料仗,更是在濱河造成了極大的恐慌湾盗,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件立轧,死亡現場離奇詭異格粪,居然都是意外死亡,警方通過查閱死者的電腦和手機氛改,發(fā)現死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門帐萎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胜卤,你說我怎么就攤上這事疆导。” “怎么了葛躏?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵澈段,是天一觀的道長悠菜。 經常有香客問我,道長败富,這世上最難降的妖魔是什么李剖? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮囤耳,結果婚禮上,老公的妹妹穿的比我還像新娘偶芍。我一直安慰自己充择,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布匪蟀。 她就那樣靜靜地躺著椎麦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪材彪。 梳的紋絲不亂的頭發(fā)上观挎,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音段化,去河邊找鬼嘁捷。 笑死,一個胖子當著我的面吹牛显熏,可吹牛的內容都是我干的雄嚣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼喘蟆,長吁一口氣:“原來是場噩夢啊……” “哼缓升!你這毒婦竟也來了?” 一聲冷哼從身側響起蕴轨,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤港谊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后橙弱,有當地人在樹林里發(fā)現了一具尸體歧寺,經...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年棘脐,在試婚紗的時候發(fā)現自己被綠了成福。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡荆残,死狀恐怖奴艾,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情内斯,我是刑警寧澤蕴潦,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布像啼,位于F島的核電站,受9級特大地震影響潭苞,放射性物質發(fā)生泄漏忽冻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一此疹、第九天 我趴在偏房一處隱蔽的房頂上張望僧诚。 院中可真熱鬧,春花似錦蝗碎、人聲如沸湖笨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慈省。三九已至,卻和暖如春眠菇,著一層夾襖步出監(jiān)牢的瞬間边败,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工捎废, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笑窜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓登疗,卻偏偏與公主長得像怖侦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谜叹,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內容