在Swift 3上使用NSFileHandle
问题描述:
如何在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)
}
}
答
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。