Swift version: 5.10
This might sound obvious, but protocol extensions are extensions to protocols as opposed to concrete types. For example, the BinaryInteger
protocol is adopted by all integer types: Int
, Int64
, UInt8
, and so on. If you wanted to add a method to all of those at once, you’d use a protocol extension to modify BinaryInteger
, like this:
extension BinaryInteger {
func cubed() -> Self {
return self * self * self
}
}
That cubed()
method will now existing on all integer types, so you can write code like this:
let i: Int = 5
let j: UInt8 = 7
print(i.cubed())
print(j.cubed())
Note: Self
with a capital S refers to whatever type conforms to the protocol, e.g. Int
or UInt32
, whereas self
with a lowercase S refers to whatever the current value of the type is, e.g. 5 or 99.
SPONSORED Join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer! Hurry up because it'll be available only until September 29th.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0 – learn more in my book Pro Swift
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.