I think any bridging conversion or upcast would count. enum Foo { case foo(NSFileManager) case bar(NSString) case baz(Int) } func test(x: Foo) { switch x { case .foo(let obj as NSObject): print("totally legal") case .bar(let obj as String): print("also cool") case .baz(let obj as Any): print("I'm not sure why, but sure") } }
Jordan > On May 9, 2017, at 11:29, Robert Widmann <devteam.cod...@gmail.com> wrote: > > Right. I guess I should have asked: Are there any other kinds of patterns we > consider exhaustive that have this structure? > > ~Robert Widmann > >> On May 9, 2017, at 2:23 PM, Jordan Rose <jordan_r...@apple.com >> <mailto:jordan_r...@apple.com>> wrote: >> >> "as NSError" isn't a tautology, though—the original type is 'Error'. >> Additionally, the presence or absence of a warning shouldn't affect >> exhaustiveness analysis, which is currently an error when you get it wrong. >> Warnings are things you can build with and fix later. >> >> Jordan >> >> >>> On May 9, 2017, at 11:22, Robert Widmann <devteam.cod...@gmail.com >>> <mailto:devteam.cod...@gmail.com>> wrote: >>> >>> We’ll warn if that kind of cast is a tautology, right? That leaves only >>> the dynamic casts, which can’t be assumed exhaustive. >>> >>> ~Robert Widmann >>> >>>> On May 9, 2017, at 2:13 PM, Jordan Rose <jordan_r...@apple.com >>>> <mailto:jordan_r...@apple.com>> wrote: >>>> >>>> It's neither a variable binding nor an expression pattern, right? It has >>>> to be compared against the original type to know whether it's exhaustive >>>> or not. (Consider "let error as NSError" in a catch clause, which should >>>> be considered exhaustive.) >>>> >>>> Jordan >>>> >>>>> On May 9, 2017, at 11:12, Robert Widmann <devteam.cod...@gmail.com >>>>> <mailto:devteam.cod...@gmail.com>> wrote: >>>>> >>>>> It’s mine, yep. It looks like it’s classifying the cast in the first >>>>> pattern as a variable binding instead of an expression pattern. I’ll >>>>> push a fix later. >>>>> >>>>> Thanks! >>>>> >>>>>> On May 9, 2017, at 1:52 PM, Jordan Rose <jordan_r...@apple.com >>>>>> <mailto:jordan_r...@apple.com>> wrote: >>>>>> >>>>>> That looks like a bug to me, since of course the first pattern won't >>>>>> always match. I suspect this is Robert's work on trying to make the >>>>>> exhaustive checks better, https://github.com/apple/swift/pull/8908 >>>>>> <https://github.com/apple/swift/pull/8908>. Thanks for catching this! >>>>>> >>>>>> Jordan >>>>>> >>>>>> >>>>>>> On May 9, 2017, at 07:09, Pushkar N Kulkarni via swift-dev >>>>>>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote: >>>>>>> >>>>>>> Hi there, >>>>>>> >>>>>>> I see a new warning message for switch statements on enums, like this >>>>>>> one: >>>>>>> >>>>>>> enum Test { >>>>>>> case one(Any) >>>>>>> case two >>>>>>> } >>>>>>> >>>>>>> let x: Test = .one("One") >>>>>>> switch x { >>>>>>> case .one(let s as String): print(s) >>>>>>> case .one: break >>>>>>> case .two: break >>>>>>> } >>>>>>> >>>>>>> enum.swift:9:10: warning: case is already handled by previous patterns; >>>>>>> consider removing it >>>>>>> case .one: break >>>>>>> >>>>>>> >>>>>>> I do not see this warning with the 04-24 dev snapshot. >>>>>>> >>>>>>> The warning goes away with the use of the wildcard pattern in the >>>>>>> second case: >>>>>>> >>>>>>> switch x { >>>>>>> case .one(let s as String): print(s) >>>>>>> case .one(_): break >>>>>>> case .two: break >>>>>>> } >>>>>>> >>>>>>> >>>>>>> I am wondering if this change is intentional, though it does make sense >>>>>>> to me. Can someone please point me to the related commit? >>>>>>> >>>>>>> Thanks in advance! >>>>>>> >>>>>>> Pushkar N Kulkarni, >>>>>>> IBM Runtimes >>>>>>> >>>>>>> Simplicity is prerequisite for reliability - Edsger W. Dijkstra >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> swift-dev mailing list >>>>>>> swift-dev@swift.org <mailto:swift-dev@swift.org> >>>>>>> https://lists.swift.org/mailman/listinfo/swift-dev >>>>>>> <https://lists.swift.org/mailman/listinfo/swift-dev> >>>>>> >>>>> >>>> >>> >> >
_______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev