</>
Skip to content
Swift lessons (21/33)

Swift — Classes

Basic class

class Person {
    var name: String
    var age: Int

    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }

    func greet() {
        print("Hi, I'm \(name)!")
    }
}

let alice = Person(name: "Alice", age: 30)
alice.greet()

Inheritance

class Animal {
    var name: String

    init(name: String) {
        self.name = name
    }

    func speak() {
        print("\(name) makes a sound")
    }
}

class Dog: Animal {
    override func speak() {
        print("\(name) says Woof!")
    }
}

let dog = Dog(name: "Rex")
dog.speak() // Rex says Woof!

Properties

class BankAccount {
    private var _balance: Double

    var balance: Double {
        get { _balance }
        set { _balance = newValue }
    }

    init(balance: Double) {
        _balance = balance
    }

    func deposit(_ amount: Double) {
        _balance += amount
    }

    func withdraw(_ amount: Double) -> Bool {
        guard _balance >= amount else { return false }
        _balance -= amount
        return true
    }
}

Reference semantics

class Person {
    var name: String
    init(name: String) { self.name = name }
}

let p1 = Person(name: "Alice")
let p2 = p1
p2.name = "Bob"

print(p1.name) // Bob (shared reference)

Deinitializers

class Resource {
    let name: String

    init(name: String) {
        self.name = name
        print("Acquired: \(name)")
    }

    deinit {
        print("Released: \(name)")
    }
}

do {
    let r = Resource(name: "File")
    // Released here
}

Type casting

class MediaItem {
    var name: String
    init(name: String) { self.name = name }
}

class Movie: MediaItem {
    var director: String
    init(name: String, director: String) {
        self.director = director
        super.init(name: name)
    }
}

let items: [MediaItem] = [
    Movie(name: "Casablanca", director: "Curtiz"),
    Movie(name: "Citizen Kane", director: "Welles")
]

for item in items {
    if let movie = item as? Movie {
        print("\(movie.name) by \(movie.director)")
    }
}

Mini Practice

Write Swift code that:

  1. Creates a class with inheritance
  2. Overrides a method in a subclass
  3. Demonstrates reference vs value semantics
  4. Uses type casting with as?

Up Next

In the next lesson, you'll learn about Properties — stored and computed properties.

Related Topics

Frequently Asked Questions about Classes

What is Classes in Swift?

Classes is a fundamental concept in Swift. This lesson explains it step by step with clear examples, making it easy for beginners to understand.

How do I learn Classes?

Start by reading the explanation above, then try the code examples. Practice by modifying the examples and experimenting with different values. Hands-on practice is the best way to learn Classes.

Why is Classes important in Swift?

Classes is essential for Swift development. Understanding this concept will help you write better code and solve real-world problems more effectively.