【问题标题】:Using NSFileHandle on Swift 3在 Swift 3 上使用 NSFileHandle
【发布时间】:2016-09-26 00:24:38
【问题描述】:
如何在 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)
}
}
【问题讨论】:
标签:
swift
swift3
nsfilehandle
【解决方案1】:
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.