2016-09-26 94 views
4

如何在Swift 3中编写这个方法?在Swift 3上使用NSFileHandle

extension NSFileHandle { 
    func readUInt32() -> UInt32? { 
     let data = self.readDataOfLength(4) 
     guard data.length == 4 else { return nil } 
     return CFSwapInt32HostToBig(UnsafePointer<UInt32>(data.bytes).memory) 
    } 
} 

回答

4
extension FileHandle { 
    func readUInt32() -> UInt32? { 
     let data = self.readData(ofLength: 4) 
     guard data.count == 4 else { return nil } 
     return UInt32(bigEndian: data.withUnsafeBytes { $0.pointee }) 
    } 
} 

FileHandle读取,返回Data值。 data.withUnsafeBytes用指向 字节的指针调用闭包,这里指针$0的类型从上下文 推导为UnsafePointer<UInt32>

UInt32(bigEndian:)从其大端 表示中创建一个整数,作为CFSwapInt32BigToHost()的替代方法。

有关如何将其转换为Data的更多示例,请参阅 round trip Swift number types to/from Data