使用Swift 4,有没有办法压缩这些字节数组初始化器?我讨厌在每个扩展中创建呼叫。希望有一种方法可以使它成为单一的init方法。
private func fromByteArray<T>(bytes: [UInt8]) -> T where T : UnsignedInteger {
return bytes.withUnsafeBufferPointer {
$0.baseAddress!.withMemoryRebound(to: T.self, capacity: 1) {
$0
}
}.pointee
}
extension UInt16 {
init(bytes: [UInt8]) {
self.init(bigEndian: fromByteArray(bytes: bytes))
}
}
extension UInt32 {
init(bytes: [UInt8]) {
self.init(bigEndian: fromByteArray(bytes: bytes))
}
}
extension UInt64 {
init(bytes: [UInt8]) {
self.init(bigEndian: fromByteArray(bytes: bytes))
}
}
答案 0 :(得分:3)
我会通过给你一个不仅在一个扩展中将所有内容都折叠为一个初始值设定项,而且还包含UInt8
的任何序列(包括Data
,{ {1}},DispatchData
,Array
或其他任何内容)并且不依赖于Foundation 和可让您选择字节序:
ContiguousArray