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