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
> <[email protected]> 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
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution