web-dev-qa-db-ja.com

Swiftのカスタムクラスの等価(==)演算子のオーバーロード

そのカスタムクラス内のカスタムクラスの等価(==)演算子をオーバーロードすることは可能ですか?ただし、この演算子がクラススコープ外でオーバーロードされる可能性があることはわかっています。サンプルコードに感謝します。前もって感謝します。

16
Souandios

グローバル関数を追加します。例えば:

class CustomClass {
    var id = "my id"
}

func ==(lhs: CustomClass, rhs: CustomClass) -> Bool {
    return lhs == rhs
}
func !=(lhs: CustomClass, rhs: CustomClass) -> Bool {
    return !(lhs == rhs)
}

Swift 2で同等のプロトコルに準拠する

class CustomClass: Equatable {
    var id = "my id"
}

func ==(left: CustomClass, right: CustomClass) -> Bool {
    return left.id == right.id
}

Swift 3で同等のプロトコルに準拠する

class CustomClass {
    var id = "my id"
}

extension CustomClass: Equatable {
    static func ==(lhs: CustomClass, rhs: CustomClass) -> Bool {
        return lhs.id == rhs.id
    }
}
30
Yoichi Tagaya

いいえ、演算子はグローバル関数を使用してオーバーロードされます。

6
mipadi