0

Equatable であり、Equatable であるかどうかに関係なく AnyObject 型の変数 (この例では「variable2」) を持つ構造体を実装しようとしています。

struct MyStruct : Equatable{
    var variable1 : String;
    var variable2 : AnyObject;

}
func == (obj1 : MyStruct, obj2 : MyStruct) -> Bool {

    if(obj1.variable2.conformsToProtocol(Equatable) && obj2.variable2.conformsToProtocol(Equatable)) {
        //...
    } else {
        //...
    }
    return ...
}

最初は variable2 がプロトコル Equatable に準拠しているかどうかを確認しようとしていましたが、そうするとコンパイル エラーが発生します。

別のアプローチで ' variable2'を変更しようとしましEquatableたが、それでも一般的な制約としてのみ使用できるというエラーが表示されます。

struct MyStruct : Equatable{
    var variable1 : String;
    var variable2 : Equatable;

}
func == (obj1 : MyStruct, obj2 : MyStruct) -> Bool {

    return obj1.variable2 == obj2.variable2;
}

私はいくつかの異なる方法を試しましたが、うまく機能させることができませんでした。誰かがこれに対する解決策を持っていますか?最初のケースを解決するのが最善の状況ですが、2番目のケースも私のニーズを満たすかもしれません.

4

2 に答える 2

0

「is」演算子を使用しない理由:

if obj1.variable2 is Equatable && obj2.variable2 is Equatable {
...
}
于 2015-12-23T20:58:13.697 に答える