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 Take the pain out of configuring and testing your paywalls. RevenueCat's Paywalls allow you to remotely configure and A/B test your entire paywall UI without any code changes or app updates.
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.