2016-09-26 5 views

ответ

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.