> On May 18, 2016, at 2:55 PM, Joe Groff <[email protected]> wrote: > >> >> On May 18, 2016, at 12:54 PM, Matthew Johnson <[email protected]> wrote: >> >> >>> On May 16, 2016, at 4:06 PM, Joe Groff via swift-evolution >>> <[email protected]> wrote: >>> >>> Currently, we parse a type after 'as[?!]' and 'is'. This is mostly what >>> you'd expect, but does lead to problems when an 'as' expression appears as >>> part of a comparison: >>> >>> 20 as Int64 < y as Int64 // error, '>' expected to close generic >>> parameter list Int64<y> >>> >>> Looking to the future, many people have also expressed interest in the >>> ability to do dynamic type checks against metatype values, not only static >>> types, as in: >>> >>> class Base {} >>> class DerivedA {} >>> class DerivedB {} >>> >>> var x: Base.Type = DerivedA >>> >>> DerivedA() as? x // succeeds >>> DerivedB() as? x // fails >> >> The dynamic check itself makes sense but it isn’t clear what type these >> expressions should return? It can’t be `DerivedA?` like it would in the >> equivalent static expression as the type is not known statically: >> >> DerivedA() as? DerivedA // succeeds with value Optional<DerivedA>.Some >> DerivedB() as? DerivedA // fails with value Optional<DerivedA>.None > > Right, the static type of a cast like this would still have to be the upper > bound type of the metatype value. (Unless we introduce some sort of > path-dependent types to allow `x.Self` to be a type.)
So `Base?` in this case? That makes sense. Thanks for clarifying. > > -Joe
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
