print

print

在第一次接觸一個沒學過的程式語言時,我們多半可以看到會以「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,有需要的記得要以參數的方式帶上)

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus