ios - 在检索 JSON 数据时,让完成 block 返回 Void 有什么意义?

标签 ios swift nsurlsession completionhandler

所以我们有这个函数可以检索 JSON 数据并将其呈现在其完成 block 中,我想了解的是为什么使用签名:((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()
  }

最佳答案

Swift 语法规定您必须在 -> 之后声明带有返回类型的闭包。

你有两个选择:

  1. typealias JSONData = (Data) -> Void
  2. typealias JSONData = (Data) -> ()

我看到苹果最常使用#1。

关于ios - 在检索 JSON 数据时,让完成 block 返回 Void 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47725187/

相关文章:

ios - 如何使用 UIView.animate 创建 U 形动画? - swift

ios - NSUrlConnection -> NSUrlSession;不再为 completionHandler 错误返回 NSError

ios - 编写简单的api调用测试

ios - UItableview 有两组选项

json - Swift:如何在异步 urlsession 函数中返回一个值?

ios - 如何在 iOS 应用程序中暂停和恢复上传过程?

ios 快速解析 : how to collect pointer data

ios - subview 在运行时调整大小 - XCode 4.5.1 iOS

ios - 核心数据: How can I update a TableView field from an alert?

ios - 将 Swift 添加到项目中会显着增加大小。如何以及何时可以避免