令d为Data的实例。在早期的Swift版本中,我可以使用类似以下的代码来测试它在内存中是否连续
d.enumerateBytes{(pBuf: UnsafeBufferPointer<UInt8>, idx: Data.Index, flag: inout Bool) -> Void in
if (pBuf.count == d.count) { print("Data is contiguous!") }
}
Run Code Online (Sandbox Code Playgroud)
但是,在Swift 5 enumerateBytes()
中已弃用,并且收到如下警告:
warning: 'enumerateBytes' is deprecated: use `regions` or `for-in` instead
Run Code Online (Sandbox Code Playgroud)
我很想做类似的事情
if d.regions.count == 1 { print("Contiguous!!!") }
Run Code Online (Sandbox Code Playgroud)
但regions
类型为CollectionOfOne<Data>
,根据定义,该类型始终包含一个元素。
有什么建议么?
从Swift 5开始,所有Data
值都具有连续存储,其类型符合新ContiguousBytes
协议(在#20225中实现)。正如@matt指出的那样,这种变化在最近的WWDC演讲中得到了强调:
因此,从Swift 5开始,我们保证struct Data是连续的缓冲区类型。
归档时间: |
|
查看次数: |
55 次 |
最近记录: |