> On May 10, 2016, at 8:46 PM, Eduardo Mourey Lopez Ne <[email protected]> 
> wrote:
> 
> Hi Chris
> 
> I do agree that it is incosistent that case works in an if but you can’t 
> assign it to a bool.

Not to me.  I can understand why you would think about it that way, but the let 
in “if let” is not assignable to a bool either.  Nor is #available.

-Chris



> 
> 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 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> 
>>> On May 10, 2016, at 4:33 AM, Sam Dods via swift-evolution 
>>> <[email protected] <mailto:[email protected]>> 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
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to