在检索 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)®ion=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 有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章
IOS/Objective-C:从完成块中检索 NSArray
iOS Objective-C AFNetworking dataTaskWithRequest:completionHandler:无法从完成块内部检索数据