确定数据实例是否连续

Ana*_*i P 0 swift

令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>,根据定义,该类型始终包含一个元素。

有什么建议么?

Ham*_*ish 7

从Swift 5开始,所有Data值都具有连续存储,其类型符合新ContiguousBytes协议(在#20225中实现)。正如@matt指出的那样,这种变化在最近的WWDC演讲中得到了强调

因此,从Swift 5开始,我们保证struct Data是连续的缓冲区类型。