在检索 JSON 数据时,让完成块返回 Void 有啥意义?

Posted

技术标签:

【中文标题】在检索 JSON 数据时,让完成块返回 Void 有啥意义?【英文标题】:In retrieving JSON data, whats the point of having a completion block return Void?在检索 JSON 数据时,让完成块返回 Void 有什么意义? 【发布时间】:2017-12-09 03:58:38 【问题描述】:

所以我们有这个函数可以检索 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】:

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

你有两个选择:

    typealias JSONData = (Data) -> Void typealias JSONData = (Data) -> ()

我看到 Apple 最常使用 #1。

【讨论】:

是否可以同时省略 -> 还是必须的? 这是必需的。查看developer.apple.com/library/content/documentation/Swift/…了解更多详情。

以上是关于在检索 JSON 数据时,让完成块返回 Void 有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift 5中的完成块内向用户显示警报

IOS/Objective-C:从完成块中检索 NSArray

从完成语句变量中检索数据时返回空白

以特定块返回SQL查询? [重复]

以 JSON 格式创建和检索数据

iOS Objective-C AFNetworking dataTaskWithRequest:completionHandler:无法从完成块内部检索数据