[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