関数の引数型がプロトコルを採用する型に依存しているswiftで、どのようにしてプロトコルを宣言できますか?迅速なプロトコル定義でのテンプレートタイプの使用
何か
protocol EndianConvertible<T> {
init(litteEndian: T);
func litteEndian() -> T;
}
のような背景: 私は迅速で、リトルエンディアンバイナリストリームのためのストリームデコーダを記述しようとしています。その
パートは、整数のプロトコルはそのINIT(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)
}
}
で利用可能であり、それを修正するための明確な方法が持っているように見えましたその仕様を追加するプロトコル。
あなたはそれを実装するクラス/タイプの具体的な型を参照するためのプロトコルで自己を使用することができます
上記の最初のスニペットのために、あなたはむしろ使うことができるようにするプロトコルは、一般的なパラメータを許可していません。 (プロトコルFoo {関連するタイプT; init(litteEndian:T);/* ... * /} ')。 – dfri