我之前在 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 中,Data
的 withUnsafeBytes()
方法使用(未类型化的)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/