【问题标题】:print() vs debugPrint() in swift快速打印()与调试打印()
【发布时间】:2017-06-09 03:54:51
【问题描述】:

这可能是一个简单的问题,但由于 print() 和 debug() print 之间的清晰理解,我无法理解在哪里使用每一个。

【问题讨论】:

    标签: swift methods printing


    【解决方案1】:

    当您想了解有关正在打印到控制台的内容的更多信息时,您可以使用 debugPrint。附加信息通常对调试很有用。

    print() - 将给定项目的文本表示写入标准输出。

    debugPrint() - 将最适合调试的给定项目的文本表示写入标准输出。

    基本上 debugPrint 添加了对调试有用的附加信息,例如类型信息等。

    一个例子:

    print(1...5)
    // Prints "1...5"
    
    
    debugPrint(1...5)
    // Prints "CountableClosedRange(1...5)"
    

    【讨论】:

    • debugPrint 也按原样打印 \n \t 之类的内容,而不格式化文本。所以如果你想看到漂亮的 json,你应该使用 print。
    【解决方案2】:

    使用print() 是一种常规方式,可以直观地查看您正在创建的内容。它不显示不必表示打印变量的“无关”信息。

    例如

    print("test")
    // prints: test
    

    但是,使用 debugPrint() 会将推断的类型添加到输出中。

    例如

    debugPrint("test")
    // prints: "test"
    

    注意它是如何添加引号来让你知道它是一个字符串。

    Erica Sadun 创造了一个完美的例子来说明这两种功能的不同之处: Swift: Logging

    【讨论】:

      【解决方案3】:

      文章链接:print-vs-debugprint

      如果您拨打网络电话并拨打debugPrint(response) 而不是print(response),您将获得更多有价值的信息。 请参阅下面的示例代码:

      示例代码使用 iTunes Search 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
      }
      

      【讨论】:

        【解决方案4】:

        如果你同时实现CustomDebugStringConvertibleCustomStringConvertible协议,那么debugPrint方法默认使用debugDescription内容,print方法默认使用description内容。

        【讨论】:

          【解决方案5】:

          debugPrint() 将最适合调试的给定项目的文本表示写入标准输出,它由几个参数组成:

          func debugPrint(_ items: Any..., separator: String = " ", terminator: String = "\n")
          

          项目: 可以包含零个或多个要打印的项目。

          分隔符:要在每个项目之间打印的字符串。默认为单个空格 (" ")。

          终止符:打印所有项目后要打印的字符串。默认为换行符 ("\n")。

          我在下面写了一些例子来加深理解:

          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"
          

          【讨论】:

            猜你喜欢
            • 2013-05-12
            • 1970-01-01
            • 2012-09-30
            • 2015-01-09
            • 1970-01-01
            • 1970-01-01
            • 2012-05-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多