[swift-evolution] Equatability for enums with associated values

Sean Heber sean at fifthace.com
Fri Jan 13 14:12:45 CST 2017


A million yes-es please.

l8r
Sean


> On Jan 13, 2017, at 1:51 PM, Adam Shin via swift-evolution <swift-evolution at swift.org> wrote:
> 
> When using enums with associated values, it's often necessary to check for equality between two enum objects in some way. That can lead to boilerplate code like this:
> 
> enum Option {
>     case foo(String)
>     case bar(Int)
> 	case zip
> }
> 
> func ==(lhs: Option, rhs: Option) -> Bool {
>     switch (lhs, rhs) {
>     case (.foo(let a), .foo(let b)) where a == b: return true
>     case (.bar(let a), .bar(let b)) where a == b: return true
>     case (.zip, .zip): return true
>     default: return false
>     }
> }
> 
> ..which results in code duplication and opens the door to potential logic errors.
> 
> Instead, what if enums with associated values were automatically Equatable when all their associated values were Equatable? That would remove the need for such boilerplate code.
> 
> The Swift language guide states that custom classes and structs don't receive a default implementation of the == operator because the compiler can't guess what "equality" means for them. However, I think this could make sense for enums. An enum case, even with associated values, seems closer to a value itself than an object with logic and state.
> 
> I'd be interested to hear any thoughts on this. Would this be a beneficial addition?
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list