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 Transform your career with the iOS Lead Essentials. Unlock over 40 hours of expert training, mentorship, and community support to secure your place among the best devs. Click for early access to this limited offer and a FREE crash course.
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.