swift 5.0 : 'withUnsafeBytes' is deprecated: use `withUnsafeBytes<R>(. ..)

标签 swift deprecated unsafe-pointers

我之前在 Swift 4.2 中使用这段代码来生成一个 id:

public static func generateId() throws -> UInt32 {
    let data: Data = try random(bytes: 4)
    let value: UInt32 = data.withUnsafeBytes { $0.pointee } // deprecated warning!
    return value // + some other stuff 
}

withUnsafeBytes 在 Swift 5.0 上已弃用。我该如何解决这个问题?

最佳答案

在 Swift 5 中,DatawithUnsafeBytes() 方法使用(未类型化的)UnsafeRawBufferPointer 调用闭包,您可以 load()来自原始内存的值:

let value = data.withUnsafeBytes { $0.load(as: UInt32.self) }

(比较 Swift 论坛中的 How to use Data.withUnsafeBytes in a well-defined manner?)。请注意,这要求内存在 4 字节边界上对齐。有关替代品,请参阅 round trip Swift number types to/from Data .

另请注意,从 Swift 4.2 开始,您可以简单地使用新的 Random API 创建一个随机的 32 位整数。 :

let randomId = UInt32.random(in: .min ... .max)

关于 swift 5.0 : 'withUnsafeBytes' is deprecated: use `withUnsafeBytes<R>(. ..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378409/

相关文章:

swift - Swift 中 `async let` 声明的类型是什么?

ios - 我试图同时显示不同的 TableViewCells

ios - 在大型 UIView 上绘制占用大量内存

C++11 和广义初始化器约定

c# - 在指向整数的指针数组上动态设置值

swift - 如何快速将自己转换为 UnsafeMutablePointer<Void> 类型

swift - 覆盖作为 Obj-C 框架类一部分的 swift 函数

serialization - 如何在 Protocol Buffer 中弃用整个消息?

c# - 为什么字符串指针位置不同?

android - 使用内部存储中的 .png 设置按钮背景资源