I think this is because all over the world a type is used to input some variable. But SomeType.self says to use this type as a value. I don't think a type can stand on it unless you name .self .
Try the following on the playground.
class Foo {} Foo // ^ Compiler error: expected member name or constructor call after type name
But with .self
class Foo {} Foo.self
source share