从Swift

时间:2016-02-21 04:30:16

标签: ios json swift uiimage nsdata

我试图在此网址上将图片表示为缓冲区:http://apiapp-env2.elasticbeanstalk.com/?nomfile=FX1wTPcaZQ1456021964555.png

正如您在响应中看到的那样,图像是存储在JSON内部数据对象中的缓冲区(我不是API的所有者,因此我无法对其进行修改)

好吧,我试图将图像从缓冲区转换为UIImage。 这就是我迄今为止尝试过的事情之一:

    Alamofire.request(.GET, URL, parameters: nil, encoding: .JSON)
  .validate()
  .response{
    request, response, json, error in
    if let _ = error{
      callback?(image: UIImage(named: "placeholder")!)
    }else if let _: AnyObject = json{
      do {
        let jsonObject = try NSJSONSerialization.JSONObjectWithData(json!, options:[])
        let bufferData = JSON(jsonObject)["Body"]["data"].array
        let imageData = NSData(bytes: bufferData!, length: bufferData!.count / sizeof(UInt32))
        let downloadImage = UIImage(data:imageData)
        callback?(image: downloadImage!)
      } catch {
        print("Error[performLoginSocialRequest]: \(error)")
      }
    }
}

但是downloadImage对象总是为零。 以前有人遇到过这个问题吗?如果是这样,你怎么解决它?

1 个答案:

答案 0 :(得分:2)

当您从SwiftyJSON调用.array对象上的JSON时,它会返回一个类型为[JSON]?的数组。虽然将其传递到NSData init方法似乎有效,但它实际上是通过将JSON对象切换为一个字节大小并存储该数据来创建数据。

您要做的是将bufferData[JSON]类型转换为[UInt8]

let bufferData = JSON(jsonObject)["Body"]["data"].array
let bytes = bufferData!.flatMap { $0.uInt8 }
let imageData = NSData(bytes: bytes, length: bytes)