==Swift 3 の基本クラスとそのサブクラスに演算子 (from )を実装しようとしています。すべてのクラスは Swift でのみ使用されるため、プロトコルEquatableを関与させたくありません。NSObjectNSCopying
基本クラスとサブクラスから始めました。
class Base {
var x : Int
}
class Subclass : Base {
var y : String
}
Equatableここで、 と==演算子をに追加したいと思いましたBase。十分に単純に思えます。==ドキュメントからオペレーターの署名をコピーします。
class Base : Equatable {
var x : Int
static func == (lhs: Base, rhs: Base) -> Bool {
return lhs.x == rhs.x
}
}
ここまでは順調ですね。サブクラスの場合:
class Subclass : Base {
static override func == (lhs: Base, rhs: Base) -> Bool {
return true
}
}
しかし、これはエラーになります:
演算子関数は「最終」演算子関数をオーバーライドします
わかった。いくつかの調査(まだSwift 3を学習中)の後、型メソッドをオーバーライドできることを示すために をstatic置き換えることができることを学びました。class
だから私は in に変更しようとしstaticます:classBase
class Base : Equatable {
var x : Int
class func == (lhs: Base, rhs: Base) -> Bool {
return lhs.x == rhs.x
}
}
しかし、それは新しいエラーになります:
非最終クラス「ベース」で宣言された演算子「==」は「最終」でなければなりません
うーん。これは、必要以上に複雑です。
基本クラスとサブクラスでEquatableプロトコルと演算子を適切に実装するにはどうすればよいですか?==