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@swift.org> 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@swift.org <mailto: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 <mailto: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
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution