有时我需要将字节数组的一部分清零。使用for循环,这很慢。使用memset()函数要快得多。我有以下代码将清除数组“ a”的元素200至299。
var a: [UInt8] = [UInt8](repeating: 1, count: 1000) // a[0..999] set to 1
start = 200
length = 100
memset(&a + start, 0, length) // a[100..199] set to 0
直到带有Xcode 11.4的Swift 5.2出现为止,这一直很好。现在也可以使用,但是会出现警告:
Inout表达式会创建一个临时指针,但是参数#1应该是一个对“ +”的调用不再有效的指针
没有警告就怎么做到呢?Andybody有个主意吗?
Xcode中的whows还有更多解释:
从“ [UInt8]”到“ UnsafeMutableRawPointer”的隐式参数转换会产生一个指针,该指针仅在对“ +”的调用期间有效
在数组上使用“ withUnsafeMutableBytes”方法以便将参数显式转换为对已定义范围有效的缓冲区指针
我不明白,这是什么意思。
使用提示withUnsafeMutableBytes
正是您应该遵循的提示:
a.withUnsafeMutableBytes { ptr in
_ = memset(ptr.baseAddress! + start, 0, length)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句