从 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)
我正在尝试在 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)