这可能是一个简单的问题,但由于缺乏对 Swift 中 print() 和 debugPrint() 之间的区别的理解,我无法理解在哪里使用它们。
当您想了解有关打印到控制台的内容的更多信息时,可以使用 debugPrint。附加信息通常对于调试很有用。
print() - 将给定项目的文本表示形式写入标准输出。
debugPrint() - 将最适合调试的给定项目的文本表示形式写入标准输出。
基本上 debugPrint 添加了对调试有用的附加信息,例如类型信息等。
一个例子:
print(1...5)
// Prints "1...5"
debugPrint(1...5)
// Prints "CountableClosedRange(1...5)"
使用
print()
是直观地查看您正在创建的内容的常规方法。它不显示对于表示打印变量来说不必要的“不相关”信息。
例如
print("test")
// prints: test
但是使用
debugPrint()
会将推断的类型添加到输出中。
例如
debugPrint("test")
// prints: "test"
注意它如何添加引号来让您知道它是一个字符串。
Erica Sadun 创建了一个完美的示例来说明这两个函数的不同之处: Swift:日志记录
文章链接:打印与调试打印
如果您进行网络调用并执行
debugPrint(response)
而不是 print(response)
,您将获得更多有价值的信息。
请参阅下面的示例代码:
示例代码:使用 iTunes 搜索 Api
let urlReq = URLRequest(url: URL(string: "https://itunes.apple.com/search?term=jack+johnson&limit=1")!)
Alamofire.request(urlReq).responseJSON { (data) in
print(data)
print("\n\n\n\n\n\n\n\n\n")
debugPrint(data)
}
控制台输出(删除一些响应字段)
用于打印
SUCCESS: {
resultCount = 1;
results = (
{
artistId = 909253;
artistName = "Jack Johnson";
artistViewUrl = "https://itunes.apple.com/us/artist/jack-johnson/id909253?uo=4";
}
);
}
对于 调试打印
[Request]: GET https://itunes.apple.com/search?term=jack+johnson&limit=1
[Response]: <NSHTTPURLResponse: 0x610000223860> { URL: https://itunes.apple.com/search?term=jack+johnson&limit=1 } { status code: 200, headers {
"Access-Control-Allow-Origin" = "*";
"Cache-Control" = "max-age=86345";
Connection = "keep-alive";
"Content-Disposition" = "attachment; filename=1.txt";
"Content-Length" = 1783;
"Content-Type" = "text/javascript; charset=utf-8";
Date = "Sat, 23 Sep 2017 14:29:11 GMT";
"Strict-Transport-Security" = "max-age=31536000";
Vary = "Accept-Encoding";
"X-Apple-Partner" = "origin.0";
"X-Cache" = "TCP_MISS from a23-76-156-143.deploy.akamaitechnologies.com (AkamaiGHost/9.1.0.4-20866905) (-)";
"X-Cache-Remote" = "TCP_MISS from a23-45-232-92.deploy.akamaitechnologies.com (AkamaiGHost/9.1.0.4-20866905) (-)";
"X-True-Cache-Key" = "/L/itunes.apple.com/search ci2=limit=1&term=jack+johnson__";
"apple-originating-system" = MZStoreServices;
"apple-seq" = 0;
"apple-timing-app" = "86 ms";
"apple-tk" = false;
"x-apple-application-instance" = 1000492;
"x-apple-application-site" = NWK;
"x-apple-jingle-correlation-key" = VEF3J3UWCHKUSGPHDZRI6RB2QY;
"x-apple-orig-url" = "https://itunes.apple.com/search?term=jack+johnson&limit=1";
"x-apple-request-uuid" = "a90bb4ee-9611-d549-19e7-1e628f443a86";
"x-apple-translated-wo-url" = "/WebObjects/MZStoreServices.woa/ws/wsSearch?term=jack+johnson&limit=1&urlDesc=";
"x-content-type-options" = nosniff;
"x-webobjects-loadaverage" = 0;
} }
[Data]: 1783 bytes
[Result]: SUCCESS: {
resultCount = 1;
results = (
{
artistId = 909253;
artistName = "Jack Johnson";
artistViewUrl = "https://itunes.apple.com/us/artist/jack-johnson/id909253?uo=4";
}
);
}
[Timeline]: Timeline:
{
"Request Start Time": 527869893.013,
"Initial Response Time": 527869893.033,
"Request Completed Time": 527869893.034,
"Serialization Completed Time": 527869893.035,
"Latency": 0.020secs,
"Request Duration": 0.021secs,
"Serialization Duration": 0.001secs,
"Total Duration": 0.021secs
}
如果您同时实现
CustomDebugStringConvertible
和 CustomStringConvertible
协议,则 debugPrint
方法默认使用 debugDescription
内容,print
方法默认使用 description
内容。
debugPrint() 将最适合调试的给定项目的文本表示写入标准输出,它由几个参数组成:
func debugPrint(_ items: Any..., separator: String = " ", terminator: String = "\n")
项目: 可以包含零个或多个要打印的项目。
separator:在每个项目之间打印的字符串。默认为单个空格 (" ")。
terminator:打印完所有项目后要打印的字符串。默认为换行符 (" ”)。
我在下面写了一些例子以方便理解:
debugPrint("One two three four five")
// Prints "One two three four five"
debugPrint(1...5)
// Prints "ClosedRange(1...5)"
debugPrint(1.0, 2.0, 3.0, 4.0, 5.0)
// Prints "1.0 2.0 3.0 4.0 5.0"
要打印由空格以外的内容分隔的项目,请传递字符串作为分隔符。
debugPrint(1.0, 2.0, 3.0, 4.0, 5.0, separator: " ... ")
// Prints "1.0 ... 2.0 ... 3.0 ... 4.0 ... 5.0"
默认情况下,每次调用 debugPrint(_:separator:terminator:) 的输出都包含换行符。要打印没有尾随换行符的项目,请传递一个空字符串作为终止符或传递您想要的任何其他内容。
for n in 1...5 {
debugPrint(n, terminator: "")
}
// Prints "12345"