在 Swift 3.1 中,不推荐使用 UnsafeMutablePointer.initialize(from:)
Posted
技术标签:
【中文标题】在 Swift 3.1 中,不推荐使用 UnsafeMutablePointer.initialize(from:)【英文标题】:In Swift 3.1, UnsafeMutablePointer.initialize(from:) is deprecated 【发布时间】:2017-04-30 17:43:11 【问题描述】:。 Xcode 建议我改用 UnsafeMutableBufferPointer.initialize(from:) 。我有一个看起来像这样的代码块:
let pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: 64)
pointer.initialize(from: repeatElement(0, count: 64))
由于弃用,代码给了我一个编译时警告。所以我要把它改成:
let pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: 64)
let buffer = UnsafeMutableBufferPointer(start: pointer, count: 64)
_ = buffer.initialize(from: repeatElement(0, count: 64))
这是正确的方法吗?我只是想确保我做得正确。
【问题讨论】:
【参考方案1】:这是正确的,但您可以使用更简单的方式分配和初始化内存
let pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: 64)
pointer.initialize(to: 0, count: 64)
创建一个 buffer 指针视图仍然很有用,因为
是一个集合,有一个count
属性并且可以枚举:
let buffer = UnsafeMutableBufferPointer(start: pointer, count: 64)
for byte in buffer
// ...
但这与内存的初始化方式无关。
【讨论】:
没有回答问题... @StackUnderflow:问题是 “这是正确的方法吗?” 我用 “它是正确的” 来回答——然后是一个更简单的解决方案。请让我知道您对此有什么不清楚的地方。 编译时警告仍然存在。 @StackUnderflow:这很奇怪。我刚刚仔细检查了 Xcode 9.2 (Swift 4) 和 Xcode 9.3 beta 3 (Swift 4.1) 上面的代码编译时没有警告。 – 你在哪一行得到什么确切的警告?以上是关于在 Swift 3.1 中,不推荐使用 UnsafeMutablePointer.initialize(from:)的主要内容,如果未能解决你的问题,请参考以下文章
如何在iOS Swift 3中加密AES 256 CBC,如laravel encrypt()方法
在 Swift 3.1 中使用啥来代替 NSEntityDescription
在 Swift 3.1 中使用 DateFormatter 正确构建 dateFormat 以解析时间
SwiftyJson 无法导入在 3.0.2 中使用 Carthage 编译的 Swift 3.1 模块中