在 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&lt;AnyObject, NSError&gt; -&gt; Void 是什么意思?这行是否意味着responseJSON 方法的完成处理程序采用Response&lt;AnyObject, NSError&gt; -&gt; Void 类型的函数类型?如果是这样的话,它应该是(Response&lt;AnyObject, NSError&gt;) -&gt; Void吗?

我是 Swift 新手,从 Swift 语法来看,它让我相信 Response 结构本身正在返回 Void 并且 Response&lt;AnyObject, NSError&gt; -&gt; Void 不是函数类型,而只是一个 Void 函数。

谁能帮我解决这个问题。

【问题讨论】:

【参考方案1】:

它是一个函数类型 Response 的闭包,它不会返回任何内容。

由于它是一个完成处理程序,您应该传递一个负责处理响应的函数。

可以

.responseJSON( response in 
//your logic
)

【讨论】:

【参考方案2】:

我冒昧地详细说明 Horst 的回答,因为您是 Swift 的新手。闭包是一段代码(实际上就像一个函数),它将在代码中的某个点执行。因此,当您编写Alamofire.request(###).responseJSON(completionHandler: yourHandler) 时,您是在告诉 Alamofire 启动一个请求,并且在它从服务器获得响应后,您还将为其提供要执行的代码(因为调用是异步的)。在 Alamofire 代码的某处,当请求完成时,它将调用您提供的 completionHandler(response) 闭包,其中 response 参数类型为 Response&lt;AnyObject, NSError&gt;

Response&lt;AnyObject, NSError&gt; -&gt; 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

在 Alamofire responseJSON 理解中返回 Void 的结构体

Swift 2 - 如何从 Alamofire.responseJSON 获取数据

Alamofire中的responseJSON json解析

AlamoFire responseJSON 十进制精度