使用Alamofire和SwiftyJSON解析从服务器返回的数据,返回的数据类型是什么?

时间:2017-04-12 07:24:59

标签: swift3 alamofire swifty-json

我希望我能够正确地问这个问题: 我使用Alamofire和SwiftyJSON来管理从服务器获得的JSON文件。 我在理解response.result.value的类型方面存在问题,如何将其转换为可以使用SwiftyJSON' s JSON(data: data)构造函数构造它的对象。 这是我使用Alamofire的请求代码:

func performRequest() {
    //        parameters["retry_count"] = retryNum
    if let _ = host, let path = path {

        let request = Alamofire.request(HOST + path, method: method, parameters: parameters, headers: headers)
        request.responseJSON { response in

            print("-----")
            print(response.response?.statusCode)
            print("-----")

            // check if responseJSON already has an error
            // e.g., no network connection
            if let json = response.result.value {

                print("--------")
                print(json)
                print("--------")
            }
            guard response.result.error == nil else {
                print(response.result.error?.localizedDescription ?? "Response Error")
                self.completionHandler?(response.result.isSuccess, nil)
                self.retryRequest()
                return
            }

                // make sure we got JSON and it's a dictionary
            guard let json = response.result.value as? [String: AnyObject] else {
                print("didn't get dictionary object as JSON from API")
                self.completionHandler?(response.result.isSuccess, nil)
                self.retryRequest()
                return
            }

            // make sure status code is 200
            guard response.response?.statusCode == 200 else {
                // handle status code

                self.completionHandler?(response.result.isSuccess, nil)
                return
            }

            self.completionHandler?(response.result.isSuccess, json)
            RequestsQueue.sharedInstance.sema.signal()

        }
    }

这打印结果:

{
numOfShiftsInDay = 3;
shifts =     (
            {
        endTime = "14:00";
        startTime = "07:30";
    },
            {
        endTime = "20:00";
        startTime = "13:30";
    },
            {
        endTime = "02:00";
        startTime = "19:30";
    }
);

}

此数据类型为[String: AnyObject]

我想用它来构造一个SwiftyJSON JSON对象,因为我更容易使用SwiftyJSON方法解析数据。

这是我尝试解析它然后使用它的代码,但显然它不起作用:

            let json = JSON(data: data)

我收到此编译错误:

 Cannot convert value of type '[String : AnyObject]?' to expected argument type 'Data'

那我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

您需要使用JSON(data)而不是JSON(data: data),因为此init(data:)需要Data作为参数。

更改了行

let json = JSON(data: data)

let json = JSON(data)