Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据扩展转换为Swift 3.1和UnsafeRawPointer时出现问题_Swift_Swift3_Unsafe Pointers - Fatal编程技术网

将数据扩展转换为Swift 3.1和UnsafeRawPointer时出现问题

将数据扩展转换为Swift 3.1和UnsafeRawPointer时出现问题,swift,swift3,unsafe-pointers,Swift,Swift3,Unsafe Pointers,我正在将swift 2.3项目更新为3.1,在转换此功能时遇到了问题,特别是在一行上 这是数据的扩展 public func read<T: BinaryReadable>(offset f_offset: inout Int, byteOrder: ByteOrder = .HostByteOrder) -> T? { // Validate the specified offset bounda

我正在将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
}
public func read(偏移量f\u偏移量:inout Int,
字节顺序:字节顺序=.HostByteOrder)->T?{
//验证指定的偏移边界。
guard self.count>=(f_偏移量+MemoryLayout.size)else{
归零
}
//让dataPtr=Unsas
//在偏移位置获取数据指针。
//转换这条线路有困难吗
让dataPtr=UnsafePointer(字节).advancedBy(f_偏移量)
//增加偏移位置。
f_offset+=内存长度
//从偏移位置读取数据,并以指定的尾数返回。
让retVal=UnsafeRawPointer(dataPtr).load(as:T.self)
return(字节顺序==.littleEndian)?retVal.littleEndian:retVal.bigEndian
}
我好像听不到电话

let dataPtr = UnsafePointer<UInt8>(bytes).advancedBy(f_offset)
let dataPtr=UnsafePointer(字节)。advancedBy(f_偏移量)
要转换为使用UnsafeRawPointer。我尝试了太多的方法在这里列出,但没有成功(编译错误)

正确的语法是什么?

数据的
方法
withUnsafeBytes()
允许访问字节, 而
UnsafeRawPointer
load()
方法采用可选的字节偏移量参数:

let retVal = self.withUnsafeBytes {
    UnsafeRawPointer($0).load(fromByteOffset: f_offset, as: T.self)
}
但请注意,这假设(与您的原始代码一样) 类型
T
的内存地址正确对齐