Overloading equivalence (==) operator for custom class in Swift
Asked Answered
B

2

19

Is it possible to overload equivalence (==) operator for a custom class inside that custom class. However I know that it is possible to have this operator overloaded outside class scope. Appreciate any sample code. Thanks in advance.

Businesslike answered 4/3, 2015 at 6:43 Comment(2)
see this tutorialTetrad
This might be interesting in this context: #28793718.Theism
H
37

Add global functions. For example:

class CustomClass {
    var id = "my id"
}

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

To conform Equatable protocol in Swift 2

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

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

To conform Equatable protocol in Swift 3

class CustomClass {
    var id = "my id"
}

extension CustomClass: Equatable {
    static func ==(lhs: CustomClass, rhs: CustomClass) -> Bool {
        return lhs.id == rhs.id
    }
}
Henbit answered 4/3, 2015 at 6:49 Comment(2)
For anyone else reading this WAY too fast (like I did), note that those func declarations are OUTSIDE of the class (hence, "global").Suppress
note that the above operators won't get fired if one of the operands is an optional. also, if both the operator's parameters are optionals, and both the operands are non-optionals, it won't get fired. make both the operator's parameters implicitly unwrapped optionals to ensure it will always be fired for your custom class; but ensure nil cases are handled, otherwise your program may crashQuintal
P
6

No, operators are overloaded using global functions.

Polanco answered 4/3, 2015 at 6:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.