我需要通过电线发送从照片库中读取的图像 - 大小为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
}
}
Run Code Online (Sandbox Code Playgroud)
但是我在编译时遇到这个错误:
无法将'UnsafePointer'类型的值转换为预期的参数类型'UnsafeMutableRawPointer'
如果我使用mutableBytes:
data.withUnsafeMutableBytes { (unsafePointer: UnsafeMutablePointer<UInt8>) -> Void in... }
Run Code Online (Sandbox Code Playgroud)
然后我得到编译时错误:
不能在不可变值上使用变异成员:'data'是'let'常量
这是正确的,因为我真的不想对图像数据进行更改.我只想一次发送一大块.
有一个更好的方法吗?