type(of:)
Applied to an object:the polymorphic (internal) Type of the object, regardless of what a reference is typed. Static/class members is accessible by passing a object to type(of:) .
.Type
Sent to a type in a type declaration:the polymorphic type. For example, in a function parameter declaration, Dog means a Dog instance was expected (or an instance of one it Subcla sses), but Dog.Type means the Dog type itself was expected (or the type of one of its subclasses).
.self
Sent to a type:the type. For example, to pass the Dog type where Dog.Type are expected, you can pass Dog.self .
self
In instance code, this instance, polymorphically. In Static/class code, this type, polymorphically; self.init(...)instantiates the type.
Self
In a method declaration, when specifying the return type, this class or this instance ' s class, polymorphically.
Http://www.apeth.com/swiftBook/ch04.html#_type_reference
Swift Type operation specification