无法将 Data 上的扩展名转换为 Swift 3.1 和 UnsafeRawPointer
Trouble converting extension on Data to Swift 3.1 and UnsafeRawPointer
我正在将一个 swift 2.3 项目更新到 3.1,我 运行 遇到转换此功能的问题,特别是在一行中。
这是数据的扩展。
public func read<T: BinaryReadable>(offset f_offset: inout Int,
byteOrder: ByteOrder = .HostByteOrder) -> T? {
// Validate the specified offset boundary.
guard self.count >= (f_offset + MemoryLayout<T>.size) else {
return nil
}
//let dataPtr = Unsas
// Get data pointer at offset location.
// TROUBLE CONVERTING THIS LINE
let dataPtr = UnsafePointer<UInt8>(bytes).advancedBy(f_offset)
// Increment the offset position.
f_offset += MemoryLayout<T>.size
// Read data from offset location and return in specified endianess.
let retVal = UnsafeRawPointer(dataPtr).load(as: T.self)
return (byteOrder == .littleEndian) ? retVal.littleEndian : retVal.bigEndian
}
我好像听不懂这条线
let dataPtr = UnsafePointer<UInt8>(bytes).advancedBy(f_offset)
转换为使用 UnsafeRawPointer。我已经尝试了太多,无法在此处列出,但都没有成功(编译错误)。
正确的语法是什么?
Data
的 withUnsafeBytes()
方法可以访问字节,
UnsafeRawPointer
的 load()
方法采用可选的字节偏移量参数:
let retVal = self.withUnsafeBytes {
UnsafeRawPointer([=10=]).load(fromByteOffset: f_offset, as: T.self)
}
但请注意,这假定(与您的原始代码一样)
内存地址已针对 T
.
类型正确对齐
我正在将一个 swift 2.3 项目更新到 3.1,我 运行 遇到转换此功能的问题,特别是在一行中。
这是数据的扩展。
public func read<T: BinaryReadable>(offset f_offset: inout Int,
byteOrder: ByteOrder = .HostByteOrder) -> T? {
// Validate the specified offset boundary.
guard self.count >= (f_offset + MemoryLayout<T>.size) else {
return nil
}
//let dataPtr = Unsas
// Get data pointer at offset location.
// TROUBLE CONVERTING THIS LINE
let dataPtr = UnsafePointer<UInt8>(bytes).advancedBy(f_offset)
// Increment the offset position.
f_offset += MemoryLayout<T>.size
// Read data from offset location and return in specified endianess.
let retVal = UnsafeRawPointer(dataPtr).load(as: T.self)
return (byteOrder == .littleEndian) ? retVal.littleEndian : retVal.bigEndian
}
我好像听不懂这条线
let dataPtr = UnsafePointer<UInt8>(bytes).advancedBy(f_offset)
转换为使用 UnsafeRawPointer。我已经尝试了太多,无法在此处列出,但都没有成功(编译错误)。
正确的语法是什么?
Data
的 withUnsafeBytes()
方法可以访问字节,
UnsafeRawPointer
的 load()
方法采用可选的字节偏移量参数:
let retVal = self.withUnsafeBytes {
UnsafeRawPointer([=10=]).load(fromByteOffset: f_offset, as: T.self)
}
但请注意,这假定(与您的原始代码一样)
内存地址已针对 T
.