Swift version: 5.6
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
.
SAVE 50% To celebrate WWDC23, all our books and bundles are half price, so you can take your Swift knowledge further without spending big! Get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn advanced design patterns, testing skills, and more.
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.