Self & Self.Type & self in Swift

Sergey Chsherbak
2 min readNov 27, 2021

--

You have probably already used the self keyword many times while writing code, but did you ever think what is the self? In the present article let’s cover next questions:
• What is self, Self, and Self.Type?
• When each of them is used?

self

As you probably already know, self is usually used when you need a reference to the object in the scope of which you are currently in. So, for example, if you use self inside an instance method of a Rocket struct, self, in this case will be an instance of that struct. That’s pretty easy to understand!

But what if you are going to use self inside a class method of a class instance or a static method of a struct instance? In this case, self cannot be a reference to an instance, because there is no instance and self has a value of the current type. It is because static and class methods exist on the type itself and not on an instance.

Meta-types

But wait! Here is a thing. All values should have a type, including self. As we learned before, static and class methods exist on the type, so in this case, self holds a type of Self.Type. It means that, for instance, Dog.Type will hold all Dog type values.

Types that hold other types are named meta-types.

To put it simply, this meta-type Dog.Type can not only hold the values of Dogtype but also all of its subclasses, like in the example below, where Labrador is a subclass of Dog .

You can also use type itself as a value if you want to store it somewhere in a variable or you need to pass it in a function. For that purpose, you would use it like so -Type.self .

Self

Lastly, there is Self with a capital “S”. This one very straightforward since it always refers to a type in the current context. It can be useful when creating factory methods or returning the concrete type from a protocol method.

Thanks for reading!

if you enjoyed this article, be sure to give it a clap so others will find it more easily.

--

--

Sergey Chsherbak

iOS Engineer based in Copenhagen. Writing about Swift for fun. Working with Swift for food.