【发布时间】:2017-07-23 21:24:02
【问题描述】:
我需要通过网络发送从照片库读取的图像 - 以 5MB 为单位。
我使用PHImageManager.requestImageData(for:options:resultHandler:) 从库中读取图像并获得Data 对象。然后我想有效地将数据分成块(不复制内存)。最好的方法是什么?
这是我目前所拥有的:
imageData.withUnsafeBytes { (unsafePointer: UnsafePointer<UInt8>) -> Void in
let totalSize = data.endIndex
var offset = 0
while offset < totalSize {
let chunkSize = offset + uploadChunkSize > totalSize ? totalSize - offset : uploadChunkSize
let chunk = Data(bytesNoCopy: unsafePointer, count: chunkSize, deallocator: Data.Deallocator.none)
// send the chunk...
offset += chunkSize
}
}
但是我在编译时得到这个错误:
无法将“UnsafePointer”类型的值转换为预期的参数类型“UnsafeMutableRawPointer”
如果我使用 mutableBytes:
data.withUnsafeMutableBytes { (unsafePointer: UnsafeMutablePointer<UInt8>) -> Void in... }
然后我得到编译时错误:
不能对不可变值使用变异成员:'data' 是 'let' 常量
这是正确的,因为我真的不想更改图像数据。我只想一次发送一大块。
有没有更好的方法来做到这一点?
【问题讨论】:
-
标记解决方案时会很好。谢谢