Hi Chris

I do agree that it is incosistent that case works in an if but you can’t assign 
it to a bool

enum Bar {
    case foo(name: String)
    case notFoo
    case unknownFoo
}

var xx = Bar.foo(name: "Hello")

if case Bar.foo(let name) = xx where name == "Hello” {   //This work ok
    print("Hola")
}
var bool = case Bar.foo(let name) = xx where name == “Hello”  //But this 
doesn’t ???

//The other problem that I see is that the var “xx” seems to get lost int case 
by having it in the middle
//I think it will be better to have an alternative keyword for a single case, 
like ‘match’ that allows the variable
//to be at the begging 

//This looks much better 
var bool = xx match Bar.foo(let name) where name == “Hello”


Thanks
> On May 10, 2016, at 10:31 PM, Chris Lattner via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
>> On May 10, 2016, at 4:33 AM, Sam Dods via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> I propose that (case .Foo = bar) should be treated as an expression with a 
>> Boolean value, so the result can be set to a variable or returned from a 
>> method.
> 
> I agree that this is an important use case that Swift doesn’t serve well 
> right now, but I don’t think this is the right way to go.  
> 
>> Considering the following enumeration:
>> 
>> enum Bar {
>>   case foo(name: String)
>>   case notFoo
>>   case unknownFoo
>> }
> 
> One of the things we’ve discussed in the past is that we could have enums 
> automatically “synthesize” instance members for projecting cases as optional 
> values or bools.  For example, the above enum could be compiled into the 
> equivalent of:
> 
> extension Bar {
>    func getAsFoo() -> String? { … }
>    var isNotFoo : Bool { … }
>    var isUnknownFoo : Bool { … }
> }
> 
> Then you could just use:
> 
>   if someBar.isUnknownFoo { … }
>   if someBar.isFoo != nil { … }
>   if let name = someBar. getAsFoo() {...  }
>   someBar. getAsFoo()?.doThing() 
> 
> etc.  There is a question of naming, and getting the details right, of course.
> 
> -Chris
> _______________________________________________
> 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