[swift-evolution] Optionals and nil in Switch statement

Charlie Monroe charlie at charliemonroe.net
Wed Jun 29 00:16:21 CDT 2016


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 <http://bugs.swift.org/> and via evolution, though...

> On Jun 29, 2016, at 12:31 AM, Nevin Brackett-Rozinsky via swift-evolution <swift-evolution at 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.brackettrozinsky at gmail.com <mailto:nevin.brackettrozinsky at gmail.com>> wrote:
> Does `case "text"?` work?
> 
> 
> On Tuesday, June 28, 2016, Kevin Nattinger via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> Case .none:
> Case .some("string"):
> 
> 
> On Jun 28, 2016, at 06:40, Lucas Jordan via swift-evolution <swift-evolution at 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 at swift.org <>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160629/32b96f53/attachment.html>


More information about the swift-evolution mailing list