私は Node と呼ばれる Swift で柔軟なデータ構造を構築することに取り組んでおり、それ自体はどのタイプのコンテンツにも結び付けられていません。ただし、ノード内のペイロード データは、Equatable プロトコルに準拠する次の汎用 Element 構造体として宣言されます。
public struct Element<T>: Equatable {
var data: T;
}
public func ==<T:Equatable>(lhs: Element<T>, rhs: Element<T>) -> Bool {
return lhs.data == rhs.data;
}
制約は、Element が同等のクラス タイプに関連付けられている必要があることです。私が抱えている問題は、この要素を含むノードにあります。ノードは、ディクショナリ、配列、またはその他のコンテナ タイプで使用されます。ここに私が持っているものがあります:
public class Node: Equatable {
var payload: Element<AnyObject>
init(_data: Element<AnyObject>) {
self.payload = _data
}
}
public func ==(lhs: Node, rhs: Node) -> Bool {
return lhs.payload == rhs.payload;
}
もちろん、AnyObject が Equatable に準拠していないというエラーが表示されます。ペイロードの宣言を等価なオブジェクトのみに制限する方法はありますか? この時点では、ペイロードに格納される可能性があるオブジェクトの種類はわかりません。
また、Node の == 関数にクラス チェックを配置して、2 つの Node ペイロードが互換性があることを確認して比較する必要があることに気付きました。
考え?ありがとうございました!