0Pricing
Swift Academy · Lesson

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 here

Designated 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

  1. Structs vs Classes, properties & inits
  2. Stored vs computed properties, observers
  3. Initializers & deinit (classes)
← Back to Swift Academy