3 回答

TA貢獻1785條經驗 獲得超8個贊
一些區別:
printvs println:
print調試應用程序時,該函數在Xcode控制臺中打印消息。
這println是Swift 2中已刪除且不再使用的變體。如果看到正在使用的舊代碼,則println現在可以安全地將其替換為print。
回到Swift 1.x,print沒有在打印字符串的末尾添加換行符,而是添加了換行符println。但如今,請print始終在字符串的末尾添加換行符,如果您不希望這樣做,請提供terminator參數""。
NSLog:
NSLog 更慢
NSLog在輸出中添加時間戳和標識符,而print不會;
NSLog語句同時出現在設備的控制臺和調試器的控制臺中,而print僅出現在調試器的控制臺中。
NSLog使用printf-style格式的字符串,例如
NSLog("%0.4f", CGFloat.pi)
會產生:
2017-06-09 11:57:55.642328-0700 MyApp [28937:1751492] 3.1416
從有效的iOS 10 / macOS 10.12開始,還有第三種選擇,os_log它是“統一日志記錄”系統的一部分(請參閱WWDC 2016視頻統一日志記錄和活動跟蹤)。
您必須先導入os.log才能使用os_log函數:
import os.log
像一樣NSLog,os_log也會將消息輸出到Xcode調試控制臺和設備控制臺。
現在,您可以控制控制臺應用程序中可用的“子系統”和“類別”字段。例如:
let log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "network")
os_log("url = %@", log: log, url.absoluteString)
通過外部控制臺應用程序觀察該應用程序時,不僅可以將這些列添加到主視圖,還可以基于這些列進行過濾。想要將調試消息與(a)其他子系統代表您的應用程序生成的消息區分開來時,這非常有用?;颍╞)來自其他類別或類型的消息。
您可以指定不同類型的日志信息,無論是.info,.debug,.error,.fault(或.default):
os_log("web service did not respond", type: .error)
因此,如果使用外部控制臺應用程序,則可以選擇僅查看某些類別的消息(例如,如果在控制臺的“操作”菜單上選擇“包括調試消息”,則僅顯示調試消息)。這些設置還決定了有關是否將內容記錄到磁盤的許多細微問題。有關更多詳細信息,請參閱WWDC視頻。
使用時不能使用字符串插值os_log。例如,您不能執行以下操作:
os_log("foo \(url.absoluteString)")
您將必須執行以下操作:
os_log("url = %@", url.absoluteString)
上述限制的原因之一是為了支持數據隱私。默認情況下,原始數據類型(例如,數字)是公共的,而對象(例如,字符串)在默認情況下是私有的。在上一個記錄URL的示例中,如果從設備本身調用了該應用程序,并且正在從Mac的Console應用程序觀看,則將看到:
url = <私人>
如果要從外部設備查看它,則必須執行以下操作:
os_log("url = %{public}@", url.absoluteString)
注意,NSLog現在在幕后使用統一通知系統,但有以下警告:
您無法控制子系統,類別或日志類型;
它不支持隱私設置。
底線print足以完成簡單的任務,但NSLog很有用,因為它包含了您的時間戳信息。
的功率os_log調試具有的Xcode以外的地方進行測試iOS應用程序,當進入鮮明的救濟。例如,當測試后臺iOS應用程序進程(例如后臺獲取)時,連接到Xcode調試器會更改應用程序生命周期。因此,您經常需要在物理設備上進行測試,而不是從Xcode的調試器啟動應用程序,而是從設備本身運行應用程序。統一日志記錄使您仍然可以os_log從macOS控制臺應用程序觀看iOS設備語句。

TA貢獻1817條經驗 獲得超6個贊
如果您使用的是Swift 2,現在只能使用print()將某些內容寫入輸出中。
Apple已將println()和print()函數合并為一個。
更新至iOS 9
默認情況下,該函數通過添加換行符來終止其打印的行。
print("Hello Swift")
終結者
要打印后沒有換行符的值,請傳遞一個空字符串作為終止符
print("Hello Swift", terminator: "")
分隔器
現在,您可以使用分隔符來連接多個項目
print("Hello", "Swift", 2, separator:" ")
都
或者您可以通過這種方式組合使用
print("Hello", "Swift", 2, separator:" ", terminator:".")

TA貢獻1799條經驗 獲得超6個贊
而且,Swift 2具有debugPrint()(和CustomDebugStringConvertible協議)!
不要忘了debugPrint()其工作方式print(),但最適合的調試。
例子:
弦樂
print("Hello World!") 變成 Hello World
debugPrint("Hello World!")成為"Hello World"(行情?。?/p>
范圍
print(1..<6) 變成 1..<6
debugPrint(1..<6) 變成 Range(1..<6)
任何類都可以通過CustomDebugStringConvertible協議自定義其調試字符串表示形式。
- 3 回答
- 0 關注
- 619 瀏覽
添加回答
舉報