让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!") }
}
但是,在 Swift 5 中,enumerateBytes()
已被弃用,并且我收到如下警告:
warning: 'enumerateBytes' is deprecated: use `regions` or `for-in` instead
我很想做这样的事情
if d.regions.count == 1 { print("Contiguous!!!") }
然而regions
是CollectionOfOne<Data>
型的,根据定义,它总是包含一个元素。
有什么建议吗?
从 Swift 5 开始,所有Data
值都有连续的存储,类型符合新的ContiguousBytes
协议(在 #20225 中实现(。正如@matt所指出的,在最近的WWDC演讲中强调了这一变化:
因此,从 Swift 5 及以后,我们承诺 struct Data 是一种连续的缓冲区类型。