如何在 Swift 3 中编写此方法?
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
值(value)。
data.withUnsafeBytes
使用指向的指针调用闭包
字节,这里是指针的类型 $0
从上下文推断
作为UnsafePointer<UInt32>
.
UInt32(bigEndian:)
从其大端创建一个整数
代表,作为 CFSwapInt32BigToHost()
的替代品.
有关如何从/转换为 Data
的更多示例, 例如看
round trip Swift number types to/from Data .
关于swift - 在 Swift 3 上使用 NSFileHandle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39693139/