今天想記錄和分享一個(gè) Swift 中的自定義調(diào)試信息打印小技巧. 之前寫(xiě)過(guò)一個(gè) OC 自定義 log 的文章, 有需要的可以去查看-->iOS 開(kāi)發(fā)技巧-更好的自定義 Log
什么是調(diào)試信息打印
一般在調(diào)試項(xiàng)目的時(shí)候我們需要往控制臺(tái)打印一些信息, 以便來(lái)查看相應(yīng)的代碼執(zhí)行情況, 在 OC 中默認(rèn)是使用 NSLog 打印, Swift 中默認(rèn)使用 print打印. (C語(yǔ)言中使用的是printf, 和 Swift 很像).
為什么要自定義調(diào)試信息的打印?
這個(gè)是因?yàn)? 如果我們使用默認(rèn)的打印方式, 那么無(wú)論你是在Debug的開(kāi)發(fā)階段, 還是在Release的發(fā)布階段, 打印信息會(huì)一直打印, 這在 APP 上架時(shí)是不允許的. 而 我們自定義太拼信息打印的目的, 就是要達(dá)到調(diào)試時(shí)打印, 發(fā)布時(shí)就不再打印.
如何自定義調(diào)試打印
OC 中的方法就不贅述了, 之前已經(jīng)寫(xiě)過(guò). Swift 有些不同, 因?yàn)镺C 中的自定 Log, 一般是定義在.pch 的宏定義文件中, 但是 Swift 中已經(jīng)沒(méi)有宏定義文件了. 那么就不能自定義了嗎? 其實(shí)不是的, 因?yàn)?Swift 只要在一個(gè)文件中聲明了一個(gè)公開(kāi)的方法, 其他文件都是可以訪(fǎng)問(wèn)到的. 所以, 你可以把自定義 Log 的方法放到任何一個(gè)文件中, 但為了方便管理和使用, 我建議還是可以把這一類(lèi)公共使用的方法放到一個(gè)統(tǒng)一的文件中.
下面是我用的自定義方法:
import UIKit
func XFLog<T>(message : T, file : String = __FILE__, lineNumber : Int = __LINE__) {
#if DEBUG
let fileName = (file as NSString).lastPathComponent
print("[\(fileName):line:\(lineNumber)]- \(message)")
#endif
}
使用方式:
XFLog(message)
括號(hào)內(nèi)可以直接放變量名. 也可以直接打印整形數(shù). 如果需要打印一個(gè)沒(méi)有定義的字符串, 需要加"" . 例如想打印一句 "我是測(cè)試語(yǔ)句", 需要寫(xiě)成
XFLog("我是測(cè)試語(yǔ)句")
使用注意
應(yīng)該有看到我在里面加了個(gè)
#if DEBUG
#endif
意思是先判斷是調(diào)試模式還是 release 發(fā)布模式. 但這樣寫(xiě)之后并不能使用的, 也就是不會(huì)執(zhí)行打印, 還需要在項(xiàng)目配置中修改一下設(shè)置, 如下圖

第3步那里是展開(kāi), 第4步在 Debug 后面點(diǎn)擊加號(hào), 第5步在出現(xiàn)的方框里填入
-D DEBUG . -D 后面是一個(gè)標(biāo)識(shí), 用來(lái)區(qū)分是什么模式, 你也可以叫其他名字, 但我覺(jué)得叫 DEBUG 比較通俗易懂. 這個(gè)標(biāo)識(shí)是和上面我自定義調(diào)試打印信息里的判斷相對(duì)應(yīng)的.
這個(gè)時(shí)候再運(yùn)行就能看到打印結(jié)果了
[ViewController.swift:line:21]- 我是測(cè)試語(yǔ)句
結(jié)果顯示出測(cè)試語(yǔ)句所在的文件名, 所在文件中的行數(shù), 以及你要打印的信息.
補(bǔ)充
-
XFLog就是方法明, 這里你也可以叫其他名字, 我是用慣了 OC 的 log, 所以自定義的名字和 OC 中常用的一樣. -
<T>這個(gè)是和后面的message : T對(duì)應(yīng)的. 是用來(lái)接收你要打印的內(nèi)容.
當(dāng)然, 你也可以在打印信息里加上方法名之類(lèi)的, 無(wú)非就是再加個(gè)參數(shù). 但個(gè)人覺(jué)得沒(méi)必要了, 已經(jīng)知道打印信息所在的文件和行號(hào), 就夠了.
在各個(gè) iOS 群里交流時(shí)也發(fā)現(xiàn), 越累越多的人在問(wèn) Swift 相關(guān)的問(wèn)題, 也有很多已經(jīng)工作的朋友們提到說(shuō)項(xiàng)目有要求用 Swift 來(lái)寫(xiě)了, Swift 早晚會(huì)火起來(lái)的(蘋(píng)果的愿景)
其實(shí)最近我也是在找工作. 坐標(biāo)武漢, 眾所周知, iOS 開(kāi)發(fā)工作目前不好找, 自己就繼續(xù)利用這些時(shí)間繼續(xù)好好學(xué)習(xí), 提升自己的能力. 所以把 Swift 語(yǔ)法又仔細(xì)過(guò)一遍, 打算用 Swift 模仿一下新浪微博(已經(jīng)在模仿中了), 綜合一下所學(xué)知識(shí). 也希望能給自己找工作, 加點(diǎn)籌碼吧.