Initialization Patterns in Swift
From the Swift cheat sheet · Initialization · verified Jul 2026
Initialization Patterns
Designated, convenience, and failable initializers
swift
// Designated initializer
class Vehicle {
var wheels: Int
var maxSpeed: Double
// Designated initializer
init(wheels: Int, maxSpeed: Double) {
self.wheels = wheels
self.maxSpeed = maxSpeed
}
// Convenience initializer
convenience init(wheels: Int) {
self.init(wheels: wheels, maxSpeed: 100.0)
}
}
// Failable initializer
struct Animal {
let species: String
init?(species: String) {
guard !species.isEmpty else {
return nil
}
self.species = species
}
}
// Required initializer
class BaseClass {
required init() {
// Subclasses must implement
}
}
class SubClass: BaseClass {
required init() {
super.init()
}
}💡 Designated initializers must initialize all properties
⚡ Convenience initializers must call another initializer
📌 Failable initializers return nil on failure
🟢 Use lazy properties for expensive initialization