Alamofire和SwiftyJSON错误

时间:2015-06-20 21:51:44

标签: swift alamofire swifty-json

我已经用Cocoapods安装了Alamofire和SwiftyJSON。独立地,每个人都很好。然而,当我尝试混合两者时,我得到一个错误。

在使用Alamofire之前,我使用NSURLConnection下载数据。当connectionHandler完成后,我使用SwiftyJSON创建了一个JSON对象。

        let json = JSON(data: self.downloadedData!)

这没有任何问题。

为了让事情更清洁,我想使用Alamofire。当我使用Alamofire时,我尝试使用SwiftyJSON创建一个JSON对象。

Alamofire.request(.GET, "http://162.208.56.92/json_service.php").responseJSON()
            {
                (_, _, JSON, _) in

                let json = JSON(data: JSON)
        }

当我这样做时,我收到以下错误。

  

无法使用类型'的参数列表调用'JSON'(数据:   AnyObject?)'

由于JSON采用NSData参数,我尝试了以下操作。

Alamofire.request(.GET, "http://162.208.56.92/json_service.php").responseJSON()
            {
                (_, _, JSON, _) in

                let json = JSON(data: JSON as! NSData)
        }

这给了我以下错误。

  

无法使用类型为'(data:NSData)'

的参数列表调用'JSON'

我很难过。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

嘿,我在这里使用Alamofire和SwiftyJSON来从图像字典中获取我的代码看起来的URL

var Photos = [String]() 
override func viewDidLoad() {
    super.viewDidLoad()
       Alamofire.request(.GET, "https://api.500px.com/v1/photos",parameters:["consumer_key":"gRU4LletUCA9RiOQhaJBAt62UyRRYUE6vsIcC7fO"])
         .responseJSON { _,_,result in
            switch result {
            case .Success(let data):
                let json = JSON(data)
                self.Photos = self.ParseJSON(json)
            case .Failure(_, let error):
                print("Request failed with error: \(error)")
            }
            debugPrint(self.Photos)
    }

基本上正在做的是发出请求,如果成功,我将数据保存在JSON对象中,然后我只需解析名为 Photos

的数组中的image_url

这里也是我的ParseJSON乐趣

func ParseJSON(json:JSON)->[String]
{
    //Get Image_URL
    var pictures = [String]()
    for result in json["photos"].arrayValue{
        pictures.append(result["image_url"].stringValue)
    }
    return pictures
}

我目前正在使用 Almaofire 2.1 和最新版本的SwiftyJSON

答案 1 :(得分:1)

您必须使用dataUsingEncoding对结果进行编码。尝试使用以下代码转换结果:

    Alamofire.request(.GET, "http://162.209.75.59/json_service.php").responseJSON()
    {
        (_, _, responseBody, _) in
        // Convert the response to NSData to handle with SwiftyJSON
        if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding) {
            let json = JSON(data: data)
            println(json)
        }
    }

答案 2 :(得分:0)

lcaro的回答让我朝着正确的方向前进,但我不得不做出一些改变。下面的代码是lcaro的答案。

 Alamofire.request(.GET, "http://162.209.75.59/json_service.php").responseJSON()
    {
        (_, _, responseBody, _) in
        // Convert the response to NSData to handle with SwiftyJSON
        if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding) {
            let json = JSON(data: data)
            println(json)
        }
    }

我将responseJON()更改为responseString(),然后删除了responseBody上的NSString强制转换。

 Alamofire.request(.GET, "http://162.209.75.59/json_service.php").responseString()
    {
        (_, _, responseBody, _) in
        // Convert the response to NSData to handle with SwiftyJSON
        if let data = (responseBody).dataUsingEncoding(NSUTF8StringEncoding) {
            let json = JSON(data: data)
            println(json)
        }
    }