[swift-evolution] [Pitch] Parse expressions after 'as' and 'is' instead of just types
Joe Groff
jgroff at apple.com
Wed May 18 14:55:56 CDT 2016
> On May 18, 2016, at 12:54 PM, Matthew Johnson <matthew at anandabits.com> wrote:
>
>
>> On May 16, 2016, at 4:06 PM, Joe Groff via swift-evolution <swift-evolution at swift.org> 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.)
-Joe
More information about the swift-evolution
mailing list