我可以一次扩展多个整数类型,以便从字节数组中进行初始化吗?

时间:2018-01-02 23:49:11

标签: swift

使用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))
    }
}

1 个答案:

答案 0 :(得分:3)

我会通过给你一个不仅在一个扩展中将所有内容都折叠为一个初始值设定项,而且还包含UInt8的任何序列(包括Data,{ {1}},DispatchDataArray或其他任何内容)并且不依赖于Foundation 可让您选择字节序:

ContiguousArray