在 Alamofire responseJSON 理解中返回 Void 的结构体
Posted
技术标签:
【中文标题】在 Alamofire responseJSON 理解中返回 Void 的结构体【英文标题】:Struct returning Void in Alamofire responseJSON understanding 【发布时间】:2016-09-06 03:07:23 【问题描述】:我正忙着研究为 Swift 创建的 Alamofire 网络库。我遇到了 responseJSON 函数:
public func responseJSON(
queue queue: dispatch_queue_t? = nil,
options: NSJSONReadingOptions = .AllowFragments,
completionHandler: Response<AnyObject, NSError> -> Void)
-> Self
return response(
queue: queue,
responseSerializer: Request.JSONResponseSerializer(options: options),
completionHandler: completionHandler
)
我的问题很直接,Response<AnyObject, NSError> -> Void
是什么意思?这行是否意味着responseJSON
方法的完成处理程序采用Response<AnyObject, NSError> -> Void
类型的函数类型?如果是这样的话,它应该是(Response<AnyObject, NSError>) -> Void
吗?
我是 Swift 新手,从 Swift 语法来看,它让我相信 Response
结构本身正在返回 Void 并且 Response<AnyObject, NSError> -> Void
不是函数类型,而只是一个 Void 函数。
谁能帮我解决这个问题。
【问题讨论】:
【参考方案1】:它是一个函数类型 Response 的闭包,它不会返回任何内容。
由于它是一个完成处理程序,您应该传递一个负责处理响应的函数。
可以
.responseJSON( response in
//your logic
)
【讨论】:
【参考方案2】:我冒昧地详细说明 Horst 的回答,因为您是 Swift 的新手。闭包是一段代码(实际上就像一个函数),它将在代码中的某个点执行。因此,当您编写Alamofire.request(###).responseJSON(completionHandler: yourHandler)
时,您是在告诉 Alamofire 启动一个请求,并且在它从服务器获得响应后,您还将为其提供要执行的代码(因为调用是异步的)。在 Alamofire 代码的某处,当请求完成时,它将调用您提供的 completionHandler(response)
闭包,其中 response
参数类型为 Response<AnyObject, NSError>
。
Response<AnyObject, NSError> -> Void
签名意味着你的闭包接受一个你可以在闭包代码中使用的参数。这意味着 Alamofire 将为您提供可以在闭包代码中使用的响应对象。用 Swift 编写闭包的简洁而优雅的方式类似于 Horst 所写的:
Alamofire.request(###).responseJSON response in
// Your code
switch response
case .Success(let json):
// Use the json
case .Failure(let error):
// Use the error
【讨论】:
以上是关于在 Alamofire responseJSON 理解中返回 Void 的结构体的主要内容,如果未能解决你的问题,请参考以下文章
AlamoFire 与 Swift 1.2:“responseJSON”的模糊使用
在 Alamofire responseJSON 理解中返回 Void 的结构体
Swift 2 - 如何从 Alamofire.responseJSON 获取数据