在检索JSON数据时,有一个完成块返回Void的意义吗?

时间:2017-12-09 03:58:39

标签: ios swift nsurlsession completionhandler

所以我们有这个函数来检索JSON数据并将其呈现在完成块中,我试图理解的是为什么使用签名:((Data) -> Void)而不仅仅是(Data)void真的有必要吗?这是功能:

 typealias JSONData = ((Data) -> Void)


  func getJSONData(type: String, urlExtension: String, completion: @escaping JSONData) {

    let request = URLRequest(url: URL(string:"\(baseURL)\(type)/\(urlExtension)?api_key=\(apiKey)&region=US&append_to_response=videos,images,releases")! )


    let dataTask = session.dataTask(with: request, completionHandler: { (data, response, error) in

      if error == nil {
        if let httpResponse = response as? HTTPURLResponse {
          switch (httpResponse.statusCode) {
          case 200:
            if let data = data {
              completion(data)
            }
          default:
            print(httpResponse.statusCode)
          }
        }
      } else {

        DispatchQueue.main.async {

          if let error = error {
            print("Error: \(error.localizedDescription)") }
          return
        }
      }
    })
    dataTask.resume()
  }

1 个答案:

答案 0 :(得分:1)

Swift语法规定你必须在 Value 1: 1 2: 2 3: 3 4: 4 5: 5 6: 6 7: 7 8: 8 9: 9 10: 10 之后用返回类型声明闭包。

您有两种选择:

  1. ->
  2. typealias JSONData = (Data) -> Void
  3. 我最常使用#1来看Apple。