如何在swift中声明一个协议,其函数参数类型取决于采用该协议的类型?在swift协议定义中使用模板类型
喜欢的东西
protocol EndianConvertible<T> {
init(litteEndian: T);
func litteEndian() -> T;
}
背景: 我试图写在迅速小端二进制流的流解码器。的那
部分是一个通用的功能
class ReadStream {
var offset : Int = 0;
var data : Data;
func readIntLE<T : Integer>() -> T {
var d : T = 0
let intBits = data.withUnsafeBytes({(bytePointer: UnsafePointer<UInt8>) -> T in
bytePointer.advanced(by: offset).withMemoryRebound(to: T.self, capacity: MemoryLayout<T>.size) { pointer in
offset += MemoryLayout<T>.size
return pointer.pointee
}
})
d = T(littleEndian: intBits)
}
}
其无法编译为整数协议没有指定的init(litteEndian:T)是可用的,并且明显的方法来解决它似乎有一个协议添加了该规范。
协议不允许泛型参数,所以上面的第一个片段,你可以比较使用(协议Foo {associatedtype T; init(litteEndian:T);/* ... * /}')。 – dfri