[swift-evolution] Evaluating the case of an enum with associated values as a bool

Ethan Diamond ethanjdiamond at gmail.com
Tue Dec 19 17:17:16 CST 2017


Hello everyone,

One major pain point I've run into with Swift is the inability to evaluate
the case of an enum that has associated values in a way that just returns a
bool. We've been given the ability in a switch statement:

enum Enum {
   case a(param: String)
   case b(param: String)
}

let enumeration: Enum = a(param: "Hi")
switch enumeration {
    case a:
      // Do something
    case b:
      // Do something
}

We'e been given the ability in the context of an if statement:

enum Enum {
   case a(param: String)
   case b(param: String)
}

let enumeration: Enum = a(param: "Hi")

if case .a = enumeration {
    // Do something
}

But without a basic was of getting a bool for if an enum is a given case,
here's a list of things I can't do:

*Where statements:*

enum Enum {
   case a(param: Enum2)
   case b(param: Enum2)
}

enum Enum2 {
    case c(param: String)
    case d(param: String)
}

let enumeration: Enum = a(param: "Hi")
switch enumeration {
    case a(let inner) where [INNER CASE IS .c]
}

---------

*Filter an array for a certain case:*

Expertly explained by Erica Sadun here:
http://ericasadun.com/2017/01/31/challenge-filtering-associated-value-enumeration-arrays/

---------

*Nicely set a UIButton to hidden if an enum is a certain case:*

enum State {
    case `default`
    case searching(results: [Result])
}

myButton.isHidden = [STATE IS .searching]

---------

I've run into this issue a ton of times because I tend to represent my
views a State enums. I haven't seen anything on the board for plans for
solving this issue, thought. Has there been any discussion about addressing
it? Ideally I'd be able to do this:

enum Enum {
   case a(param: String)
   case b(param: String)
}

let enumeration: Enum = a(param: "Hi")

case .a = enumeration // Bool
case .a(let param) = enumeration // Bool, assigns "Hi" to "param"

Thanks!
Ethan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20171219/f47f9889/attachment.html>


More information about the swift-evolution mailing list