Я делаю некоторые преобразования Swift 5 для кода, который я не совсем понимаю, унаследованный код от предыдущего разработчика.Я получаю:
'withUnsafeBytes' устарела: используйте withUnsafeBytes (_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R` вместо
для:
func toArray<T>(type: T.Type) -> [T] {
return self.withUnsafeBytes {
[T](UnsafeBufferPointer(start: $0, count: self.count/MemoryLayout<T>.stride))
}
}
Я хочу заменить его на это, но я не уверен, что он делает то же самое:
func toArray<T>(type: T.Type) -> [T] where T: ExpressibleByIntegerLiteral {
var array = [T](repeating: 0, count: self.count/MemoryLayout<T>.stride)
_ = array.withUnsafeMutableBytes { copyBytes(to: $0) }
return array
}
Используется в контексте этих двух валют:
static func extractPacketSizeFromIV(iv: Data) -> Int32? {
let array = iv.toArray(type: Int32.self)
guard array.count == 4 else { return nil }
let r0 = array[0].bigEndian
let r1 = array[1].bigEndian
let r2 = array[2].bigEndian
return r2 ^ r1 ^ r0
}
static func extractGuidFromIV(iv: Data) -> Int32? {
let array = iv.toArray(type: Int32.self)
guard array.count == 4 else { return nil }
let r0 = array[0].bigEndian
let r1 = array[1].bigEndian
let r2 = array[2].bigEndian
let r3 = array[3].bigEndian
return r3 ^ r2 ^ r1 ^ r0
}