The problem with Metatype
as a keyword is that it's one level of abstraction too far up.
Think about a typical type name: Int
, UIViewController
, Record
. What you'll notice about the type name is that it's a description of the instances of that type, not a description of the type itself. You don't see types with names like IntStruct
or UIViewControllerClass
except in beginner code.
Just as UIViewController
is a class, UIViewController.Type
(to use current terminology) is a metatype. But that doesn't mean the word "metatype" belongs in its name, any more than the word "class" belongs in UIViewController
. The type name describes the instances of that type, and the instances of UIViewController.Type
are types, so Type
, not Metatype
, is the appropriate word.
That's why I say that we should use Type<T>
, not Metatype<T>
—because Metatype<T>
would have the same mistake as UIViewControllerClass
.