Swift version: 5.10
Designated initializers are the default way of creating new instances of a type. There are others, known as convenience initializers, that are there to help you accomplish common tasks more easily, but those are in addition to your designated initializers rather than a replacement.
For example, you might have a Polygon
class that stores sets of points to be drawn later on, like this:
class Polygon {
var points: [CGPoint]
init(points: [CGPoint]) {
self.points = points
}
}
Now, if that were just a struct you could go ahead and add other initializers. But as it’s a class – where the rules for initialization are quite complex – you could add a convenience initializer that sets up squares of a specific length, like this:
convenience init(squareWithLength length: CGFloat) {
let points = [
CGPoint(x: 0, y: 0),
CGPoint(x: length, y: 0),
CGPoint(x: length, y: length),
CGPoint(x: 0, y: length),
]
self.init(points: points)
}
Note how the convenience initializer ends by calling the designated initializer – this is a requirement, and means that your convenience initializers are only responsible for setting up the parts that are unique to them rather than doing everything.
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 February 9th.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0 – learn more in my book Swift Design Patterns
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.