Perhaps it should provide a Fix-It, but I don't see it as an an issue, more as 
an opportunity to understand the pattern matching behind it :)

> On 29 Jun 2016, at 08:59, Charlie Monroe <char...@charliemonroe.net> wrote:
> 
> Yes, you get a warning. But I don't see why it should - when you're matching 
> against an optional, it's evident that you mean .some("Hello")... This should 
> be automatically inferred.
> 
> I find this a confusing part of the switch statement where 
> 
> let obj: Any? = "Hello"
> 
> switch obj {
> case let str as String:
>     print("Hey, found String!")
> default:
>     print("No find.")
> }
> 
> will print "Hey found String", but it won't allow you to match against a 
> string literal. This is one of the first things that I found confusing when I 
> first learned Swift.
> 
>> On Jun 29, 2016, at 8:49 AM, David Hart <da...@hartbit.com> wrote:
>> 
>> I don't see it as a bug. The if statement calls an equality function which 
>> promotes the lhs to an Optional (or that accepts a non optional as lhs - 
>> can't remember) but the switch statement does pattern matching. Does the the 
>> compiler warn you when pattern matching an optional with a non-optional case?
>> 
>>> On 29 Jun 2016, at 07:16, Charlie Monroe via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> I nevertheless think that this is a bug and should be addressed. There is 
>>> no reason where
>>> 
>>> if stringOptional == stringNonOptional { ... }
>>> 
>>> works, but pretty much the same construct doesn't work in the switch-case. 
>>> It should be perhaps solved via a bugreport at http://bugs.swift.org and 
>>> via evolution, though...
>>> 
>>>> On Jun 29, 2016, at 12:31 AM, Nevin Brackett-Rozinsky via swift-evolution 
>>>> <swift-evolution@swift.org> wrote:
>>>> 
>>>> I just got home and tested. The answer is yes, `case "text"?` does work.
>>>> 
>>>> let optStr : String? = "text"
>>>> switch optStr {
>>>> case nil     : print("Nil")
>>>> case "text"? : print("Success")
>>>> default      : print("Default")
>>>> }
>>>> // Prints `Success`
>>>> 
>>>> 
>>>> Nevin
>>>> 
>>>>> On Tue, Jun 28, 2016 at 12:27 PM, Nevin Brackett-Rozinsky 
>>>>> <nevin.brackettrozin...@gmail.com> wrote:
>>>>> Does `case "text"?` work?
>>>>> 
>>>>> 
>>>>>> On Tuesday, June 28, 2016, Kevin Nattinger via swift-evolution 
>>>>>> <swift-evolution@swift.org> wrote:
>>>>>> Case .none:
>>>>>> Case .some("string"):
>>>>>> 
>>>>>> 
>>>>>>> On Jun 28, 2016, at 06:40, Lucas Jordan via swift-evolution 
>>>>>>> <swift-evolution@swift.org> wrote:
>>>>>>> 
>>>>>>> Forgive me if this was/is discussed already, I am new to the process 
>>>>>>> here....
>>>>>>> 
>>>>>>> (code is attached as a playground too)
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> Sometimes when I am working with a String? nil can be a reasonable 
>>>>>>> value, and what I want to do is something like the following:
>>>>>>> 
>>>>>>> import UIKit
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> var str:String? = "Hello, playground"
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> switch str{
>>>>>>> 
>>>>>>> case nil:
>>>>>>> 
>>>>>>>     print("Nil!")
>>>>>>> 
>>>>>>> case "Hello, playground":  //it would be super nice if this worked.
>>>>>>> 
>>>>>>>     print("Match")
>>>>>>> 
>>>>>>> default:
>>>>>>> 
>>>>>>>     print("Some other non nil value?")
>>>>>>> 
>>>>>>> }
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> But it does not work, the orange  text is a compile time error, 
>>>>>>> "Expression pattern of type 'String' cannot match value of type 
>>>>>>> 'String?'. I realize that this can be replaced with a let statement 
>>>>>>> (case let s where s == "Hello, playground":), but that is verbose. 
>>>>>>> 
>>>>>>> Seems like the compiler could be OK with the orange text, since it is 
>>>>>>> clearly not nil.
>>>>>>> 
>>>>>>> Thoughts?
>>>>>>> 
>>>>>>> -Lucas
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> <NilInSwitchStatements.playground.zip>
>>>>>>> _______________________________________________
>>>>>>> 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
>>> 
>>> _______________________________________________
>>> 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