> On May 10, 2017, at 01:23 , Brent Royal-Gordon <br...@architechies.com> wrote: > >> On May 8, 2017, at 2:01 AM, Rick Mann via swift-users >> <swift-users@swift.org> wrote: >> >> Seriously, I've been googling this for a half-hour, and I can't find an >> answer (everything that comes up is for ErrorType, absolutely nothing for >> Error). >> >> I have an enum: >> >> enum MyErrors : Error >> { >> case one(String) >> case two >> case three(String) >> } >> >> let a: MyErrors = .one("foo") >> let b = .two >> let c = .towo >> >> I want to compare them with ==, and I don't care about the associated types. >> I can't for the life of me figure out how without an exhaustive switch >> statement in a == definition. Is that the only way? > > Yes, the correct way to compare two enums is with a `switch` statement. > > The good news is, Swift's `switch` statement is good enough that these aren't > terribly difficult to write. My preferred pattern (given your "ignore the > associated type" semantic) is: > > extension MyErrors: Equatable { > static func == (lhs: MyErrors, rhs: MyErrors) -> Bool { > switch (lhs, rhs) { > case (.one, .one): > return true > case (.two, .two): > return true > case (.three, .three): > return true > case (.one, _), (.two, _), (.three, _): > return false > } > } > } > > You do it this way instead of using `default:` so that, if you add another > case later, it won't just get matched by the `default:` and always return > `false`.
This seems so obvious that I feel like it should be provided by the language by default. I suppose you can make it even more compact with case (.one, .one), (.two, .two), (.three, .three): return true Maybe swift could provide a 'case==()' so one needn't write this (I can see it getting quite tedious and error-prone, should one forget to update the equality after adding additional cases). > (P.S. I would suggest using a name like `MyError`, not `MyErrors`. A given > instance of `MyError` only represents one of the errors, not several of them.) I did in my actual code. This was just quickly typing the email and hiding the real error name. -- Rick Mann rm...@latencyzero.com _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users