【问题标题】:Alamofire and SwiftyJSON ErrorAlamofire 和 SwiftyJSON 错误
【发布时间】:2015-06-20 21:51:44
【问题描述】:

我已经用 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 采用 NSData 参数,因此我尝试了以下方法。

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

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

这给了我以下错误。

无法使用类型为“(数据:NSData)”的参数列表调用“JSON”

我被难住了。有什么想法吗?

【问题讨论】:

    标签: swift alamofire swifty-json


    【解决方案1】:

    嘿,我同时使用 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

    【讨论】:

      【解决方案2】:

      您必须使用 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)
              }
          }
      

      【讨论】:

      • 感谢您的回复。这一行 if let data = (responseBody as!NSString).dataUsingEncoding(NSUTF8StringEncoding) 调用了以下错误。无法将“__NSCFDictionary”(0x10611ca60)类型的值转换为“NSString”(0x1065ac8e0)。
      【解决方案3】:

      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)
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-24
        • 2015-12-19
        • 1970-01-01
        • 2016-10-26
        • 2015-04-20
        • 2014-12-27
        • 1970-01-01
        相关资源
        最近更新 更多