# Comparing enum cases while ignoring associated values

**URL:** <https://forums.swift.org/t/comparing-enum-cases-while-ignoring-associated-values/15922>\
**Category:** Using Swift\
**Created:** [September 6, 2018, 9:06pm UTC](https://forums.swift.org/t/comparing-enum-cases-while-ignoring-associated-values/15922 "2018-09-06T21:06:32Z")\
**Posts on this page:** 1\
**Showing post:** 24

<div class="post-metadata">

**Author:** ![tera](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/tera/32/38201_2.png) [@tera](https://forums.swift.org/u/tera)\
**Post date:** [May 19, 2025, 11:56am UTC](https://forums.swift.org/t/comparing-enum-cases-while-ignoring-associated-values/15922/24 "2025-05-19T11:56:37Z")

</div>

Interestingly `Error` / `NSError` has the superpowers to know enum's discriminator and by abusing it you could get that out:

```swift
protocol EnumWithDiscriminator: Error {
    var discriminator: Int { get }
}
extension EnumWithDiscriminator {
    var discriminator: Int {
        (self as NSError).code
    }
}

```

Test:

```swift
struct Client {}
struct Project {}
struct Job { let name: String }
struct Version {}

enum NavNode {
    case client(Client)
    case project(Project)
    case job(Job)
    case version(Version)
}

extension NavNode: EnumWithDiscriminator {}

let a = NavNode.job(Job(name: "a"))
let b = NavNode.job(Job(name: "b"))
let c = NavNode.project(Project())
precondition(a.discriminator == b.discriminator)
precondition(a.discriminator != c.discriminator)

```

---

_[View the full topic](https://forums.swift.org/t/comparing-enum-cases-while-ignoring-associated-values/15922)._
