別の汎用プロトコルのタイプを持つ汎用プロトコルを作成するにはどうすればよいですか?genericプロトコルのタイプの変数を持つ汎用プロトコル
私の例では、ヒープには、Comparableプロトコルに準拠するヒープ内の要素を持つことができるので、汎用型のプロトコルです。
私はプロトコルとして(コードの重複を回避し、練習するために)したい私のpriorityQueueでは、私はpriorityQueueにHeap.TがPriorityQueue.Itemと等しいところにヒープを含めることを欲しいですが、どのようにそれを行うか分からない。何か案は?
もちろん、私は「抽象クラス」で行うことができますが、ここでは重要ではありません。このコードは動作します
public protocol PriorityQueuable: Hashable {
associatedtype KeyType: Comparable
associatedtype ValueType: Comparable
var key: KeyType { get set }
var value: ValueType { get set }
}
protocol Heap {
associatedtype T: Comparable
var data: [T] { get set }
mutating func heapify(parentIndex: Int)
}
protocol PriorityQueue {
associatedtype Item: PriorityQueuable
//FIXME: doesn't allow me to do that. Why?
var heap: Heap<Item> { get set }
// doesn't compile as well
// var heap: Heap { get set }
}
あなたが作る場合は、 '' Heap'のサブクラスをPriorityQueue'何 – Lawliet
スウィフトのデータ構造は、主に構造体であるため、構造体として優先度キューを具体的に実装したいのですが、構造体が継承されないため、このオプションを考慮しないことにしました。 +言語について何かを学ぶ新しい機会です – denis631
ラッピングを試してみてください'Heap'でジェネリッククラス – paper1111