This would be easily solved if pattern matching was available as an expression, 
such as in Haskell, OCaml / Standard ML, and Scala / Kotlin. :-)

> On Dec 20, 2017, at 11: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

Reply via email to