AFNetworking 2 + SwiftyJSON

时间:2014-10-25 22:31:21

标签: ios swift afnetworking alamofire

SwiftyJSON https://github.com/SwiftyJSON/SwiftyJSON看起来很有希望。但是,说明只讨论与Alamofire(AFNetworking for Swift)的集成。但是,由于当前项目的性质,它已使用AFNetworking2并且无法切换到Alamofire。但是,我无法将AFNetworkingSwiftyJSON进行整合。

我有以下代码块,如何将responseObject(可以下载到NSDictionary)转换为SwiftyJSON中定义的JSON对象?下面的代码不起作用。

        let task:NSURLSessionDataTask = AFHTTPSessionManager.GET(
            url,
            parameters: params,
            success: { (task: NSURLSessionDataTask!, responseObject: AnyObject!) in

                dispatch_async(dispatch_get_main_queue(), {

                    // How do I convert responseObject, which can be downcasted to NSDictionary to a JSON object?
                    let data = JSON(data: responseObject)
                    completion(task: task, response: data as JSON!, error: nil)
                })
            },
            failure: { (task: NSURLSessionDataTask!, error: NSError!) in
                dispatch_async(dispatch_get_main_queue(), {
                    completion(task: task, response: nil, error: error)
                })
            }
        )

1 个答案:

答案 0 :(得分:3)

首先,您不需要调度到主队列。 AFNetworking已在主线程上调用这些块。

您正在使用的初始化程序是期望数据,而不是JSON对象。

您目前正在使用此初始化程序,它需要NSData

let json = JSON(data: dataFromNetworking)

相反,您应该使用此初始值设定项:

let json = JSON(jsonObject)

如果你在这里传递responseObject,SwiftyJSON会正常工作。


另一个注意事项:此代码不属于完成块。在AFNetworking的设计中,您应该创建一个响应序列化器来处理服务器的响应。我建议查看AFJSONResponseSerializer的源代码并将其移植到使用SwiftyJSON。