在第一次接觸一個沒學過的程式語言時,我們多半可以看到會以「Hello, world!」作為開頭; 而你第一個所使用的 method,也很有可能就是印出東西相關的。 我在這邊寫的是 print,可能在別的語言並不是這個詞,是 printf 或是 console.log() 之類, 但這邊(或是這整個網站XD)就以 Swift 為主。
NSLog v.s print
有接觸過 iOS 開發的人,你可能也會看過別人使用 NSLog,而這邊就解釋一下兩者的差異:
NSLog
它是屬於 Fundation 的一個 function:
會加上 timestamp 會加上 identifier 會印在 device console 會花較多一些些的效能,所以會比較慢一些(因為前兩者)
會印在 debugger console 所以,若你只是需要記錄在 debugger console 的話,則建議就使用 print 就好。
開始使用
為了瞭解程式的執行內容,我們便開始在一些地方加上 print 的功能,像是
if a == 1 {
print("a 等於 1")
} else {
print("a 不等於 1")
}
這樣就可以在 debugger console 那看到程式目前是進到哪個判斷式裡頭, 不過他大概就很簡略地顯示
a 等於 1
只能透過 print 的訊息來判斷是在哪,發生什麼事; 如果我們只是印出各種 print(error),就會比較難知道是誰發生了什麼事。
在輸出時加上檔案名稱及 function 和列數 在 Swift 裡頭,我們可以寫 #file #function #line 來取得相關資訊,並且簡單地分類:
public func ALogDebug(_ string: Any, file: String = #file, line: Int = #line) {
print("📒 \(file.components(separatedBy: "/").last ?? "")[\(line)]: \(string)")
}
public func ALogWarn(_ string: Any, file: String = #file, line: Int = #line) {
print("⚠️ \(file.components(separatedBy: "/").last ?? "")[\(line)]: \(string)")
}
public func ALogInfo(_ string: Any, file: String = #file, line: Int = #line) {
print("ℹ️ \(file.components(separatedBy: "/").last ?? "")[\(line)]: \(string)")
}
public func ALogError(_ string: Any, file: String = #file, line: Int = #line) {
print("🚨 \(file.components(separatedBy: "/").last ?? "")[\(line)]: \(string)")
}
我個人習慣分成 Debug、Warn、Info、Error,
- Debug:為了開發需要看到的資訊
- Warn:不應該執行到的警告,但不會造成 Crash 的程度
- Info:像是網路回傳的資訊內容
- Error:就⋯⋯紀錄 Error 的內容XDD 這樣就可以在 debugger console 看到比較詳細的內容。
(我沒有放 function name,有需要的記得要以參數的方式帶上)