从 Swift 中的缓冲区获取 NSData

Get NSData from buffer in Swift

我正在尝试在 URL 上获取表示为缓冲区的图像:http://apiapp-env2.elasticbeanstalk.com/?nomfile=FX1wTPcaZQ1456021964555.png

正如你在响应中看到的那样,图像是一个 Buffer 存储在 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 对象始终为 nil。 以前有人遇到过这个问题吗?如果是,你怎么解决?

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

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

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