Swift version: 5.10
When you’re writing protocols and protocol extensions, there’s a difference between Self
(capital S) and self
(lowercase S). When used with a capital S, Self
refers to the type that conform to the protocol, e.g. String
or Int
. When used with a lowercase S, self
refers to the value inside that type, e.g. “hello” or 556.
As an example, consider this extension on BinaryInteger
:
extension BinaryInteger {
func squared() -> Self {
return self * self
}
}
Remember, Self
with a capital S refers to whatever type is conforming to the protocol. In the example above, Int
conforms to BinaryInteger
, so when called on Int
the method returns an Int
.
On the other hand, self
with a lowercase S refers to whatever value the type holds. If the example above were called on an Int
storing the value 5 it would effectively be 5 * 5
.
SPONSORED Get accurate app localizations in minutes using AI. Choose your languages & receive translations for 40+ markets!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.