I agree this would be useful. At the moment I have to hack around it with things like `var isFoo: Bool { if case .foo = self …`* with cases I commonly need, but this is definitely a feature that has come up before and I support. It is potentially related to getting the values through an accessor, which has also come up several times.
Sidenote, your `switch` example is actually trivial with existing syntax: switch enumeration { case .a(.c(let param)): // or just .a(.c) if you don't need the value print(param) default: break } I use this from time to time switching over, e.g., optional enums. *: ugliest syntax ever, and it can't even be used as a standalone expression. > On Dec 20, 2017, at 8:44 AM, Ethan Diamond via swift-evolution > <swift-evolution@swift.org> wrote: > > 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/ > > <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 > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution