首页 > 解决方案 > 将 NSMutableData 的一部分复制到新的 NSMutableData 对象

问题描述

我正在将一个大文件读入 NSMutableData 对象。

var lBuffer : NSMutableData = try NSMutableData(contentsOfFile: pFilePath)

我想一次使用 NSMutableData 对象的一部分。所以我正在尝试使用 .subdata(with: NSRange),但出现错误。

var lBufferChunk : NSMutableData = lBuffer.subdata(with: NSRange(location: 0, length: lSizeOfChunk)) as! NSMutableData

我得到的错误是:
无法将“NSSubrangeData”(0x7fffa6ea3ef8)类型的值转换为“NSMutableData”(0x7fffa6a403f8)

根据文档, .subdata(with: NSRange) 应该返回一个 Data 对象。

如何将其转换为 Data 对象以将其转换回 NSMutableData?或者有没有更好的方法从大型 NSMutableData 中获取一部分/片段?

标签: swiftmacosnsdata

解决方案


如果你真的想要,你可以将调用的结果lBuffer.subdata转换为 NSData,然后调用mutableCopy()并将结果强制转换为 NSMutableData。但是不要!首先不要使用 NSData 或 NSMutableData。这是斯威夫特。使用数据。

var lBuffer = Data(contentsOf: myFileURL)

现在只需打电话subdata(in:)

var lBufferChunk = lBuffer.subdata(in: myRange)

或下标

var lBufferChunk = lBuffer[myRange]

var使其可变。


推荐阅读