Sorry all for attaching the original post to the Non-Exhaustive enums thread. I"m moving it down to it's own thread.
My understanding is I'm not allowed to write up a proposal unless I have the time to implement it. Is that still true? This is a major pain point for me to avoid having to write things like this: if case .search = presenter.state { return true } else { return false } Side note: Thanks Kevin, didn't know you could nest enums in switches like that. Super helpful! ------------------------------------------------------ I thought I would add another case that isn’t possible with current syntax (so far as I’m aware). You can’t negate the comparison to do something for all cases except a particular case. You have to have an empty if block and use the else block, or have an empty case in a switch statement and use the default. enum Enum { case a(param: String) case b(param: String) case c(param: String) } let enumeration: Enum = .a(param: "Hi") if !(case .a = enumeration) { // Do something } — Charles >* On Dec 20, 2017, at 9:55 AM, Kevin Nattinger via swift-evolution ><swift-evolution at swift.org ><https://lists.swift.org/mailman/listinfo/swift-evolution>> wrote: *> >* 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 at swift.org <https://lists.swift.org/mailman/listinfo/swift-evolution> <mailto:swift-evolution at swift.org <https://lists.swift.org/mailman/listinfo/swift-evolution>>> 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/> <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 at swift.org <https://lists.swift.org/mailman/listinfo/swift-evolution> <mailto:swift-evolution at swift.org <https://lists.swift.org/mailman/listinfo/swift-evolution>> *>>* https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution> *> >* _______________________________________________ *>* swift-evolution mailing list *>* swift-evolution at swift.org <https://lists.swift.org/mailman/listinfo/swift-evolution> *>* https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>*
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution