Initializers & deinit (classes)
Create designated and convenience initializers, provide default values, use failable init where needed, and understand class deinitializers.
Initializers & deinit (classes) is a free Swift Academy lesson on CoddyKit — lesson 3 of 3. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Swift Academy learning path, one of 3 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Overview
This lesson covers designated vs convenience initializers, default values, failable init, and class deinit.
Struct init basics
Structs get a memberwise initializer. Provide default values to simplify calls.
struct User {
var name: String = "Guest" // default value
var age: Int
// memberwise init is synthesized: User(name:age:)
}
let u1 = User(name: "Ada", age: 20)
let u2 = User(age: 0) // uses default name
print(u1.name, u2.name)Designated init
A designated initializer ensures all stored properties are set before use.
class Person {
let name: String
let id: Int
// Designated initializer: fully initializes stored properties
init(name: String, id: Int) {
self.name = name
self.id = id
}
}
let p = Person(name: "Bob", id: 1)
print(p.name, p.id)Convenience init
convenience initializers must delegate to a designated initializer in the same class.
class Rectangle {
var width: Double
var height: Double
// Designated
init(width: Double, height: Double) {
self.width = width
self.height = height
}
// Convenience must call a designated initializer
convenience init(square side: Double) {
self.init(width: side, height: side)
}
}
print(Rectangle(square: 3).width)Failable init
Use init? for inputs that can fail validation. The result is optional.
struct Email {
let value: String
init?(_ raw: String) {
guard raw.contains("@") else { return nil } // fail to initialize
self.value = raw
}
}
print(Email("a@b.com")?.value ?? "invalid")
print(Email("not email")?.value ?? "invalid")Deinitializer
Only classes have deinit, called when the instance is deallocated (ARC).
class TempResource {
let id: Int
init(id: Int) { self.id = id }
deinit { print("Releasing resource", id) }
}
do {
let r = TempResource(id: 42)
print("Using", r.id)
} // r goes out of scope; ARC may call deinit hereDesignated vs convenience
Quick check: Which initializer must convenience inits ultimately call?
Recap
Recap: Use designated inits to set all properties; add convenience inits to offer nicer call sites; consider init? for validation; classes clean up in deinit.
Frequently asked questions
Is the “Initializers & deinit (classes)” lesson free?
Yes — the full text of “Initializers & deinit (classes)” is free to read here on the web, and the Swift Academy course includes 3 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Swift Academy course, upgrade to CoddyKit PRO.
What will I learn in “Initializers & deinit (classes)”?
Create designated and convenience initializers, provide default values, use failable init where needed, and understand class deinitializers. You practise Swift Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Swift Academy?
No prior experience is required. Swift Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 3 of 3, so you can start here or from the beginning and move at your own pace.
How long does the “Initializers & deinit (classes)” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Swift Academy lesson?
Yes. Every Swift Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Structs vs Classes, properties & inits
- Stored vs computed properties, observers
- Initializers & deinit (classes)