What if you could update one thing and see the change everywhere instantly?
Why classes exist alongside structs in Swift - The Real Reasons
Imagine you want to organize information about many people, like their names and ages, and also keep track of changes to their details in different parts of your app.
If you try to copy all the details every time you want to update or share them, it becomes slow and confusing. You might accidentally change one copy but forget to update others, causing mistakes.
Classes let you create one shared object that many parts of your app can use and change together. This way, updates happen in one place, keeping everything in sync easily.
var person1 = Person(name: "Anna", age: 30) var person2 = person1 person2.age = 31 // person1.age is still 30
class Person { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } } var person1 = Person(name: "Anna", age: 30) var person2 = person1 person2.age = 31 // person1.age is now 31
It enables shared, changeable data that stays consistent everywhere it's used.
Think of a music app where the same song object is used in playlists and the player; changing the song's info updates it everywhere instantly.
Structs copy data, so changes don't affect the original.
Classes share a single object, so changes update everywhere.
Classes are great when you want shared, changeable data.
Practice
Solution
Step 1: Understand the difference between classes and structs
Structs are value types, meaning each copy is independent. Classes are reference types, meaning multiple variables can share the same instance.Step 2: Identify why classes are needed
Classes allow shared data through references and support inheritance, which structs do not.Final Answer:
Because classes support shared references and inheritance, while structs do not -> Option CQuick Check:
Classes = shared references + inheritance [OK]
- Thinking structs support inheritance
- Believing classes cannot store data
- Assuming structs are always slower
Solution
Step 1: Recall Swift syntax for class declaration
Classes in Swift are declared using the keywordclassfollowed by the class name and braces.Step 2: Check each option
class MyClass { var name: String } correctly usesclass MyClass { var name: String }. struct MyClass { var name: String } usesstruct, not class. func MyClass() { var name: String } usesfunc, which is incorrect. let MyClass = class { var name: String } uses invalid syntax.Final Answer:
class MyClass { var name: String } -> Option BQuick Check:
Class declaration uses 'class' keyword [OK]
- Using 'struct' instead of 'class'
- Trying to declare class inside a function
- Incorrect syntax with 'let' or 'func'
class Person {
var name: String
init(name: String) { self.name = name }
}
var p1 = Person(name: "Alice")
var p2 = p1
p2.name = "Bob"
print(p1.name)Solution
Step 1: Understand class reference behavior
Classes are reference types, sop1andp2point to the same object.Step 2: Analyze the code changes
Changingp2.nameto "Bob" changes the shared object. Printingp1.nameshows "Bob".Final Answer:
Bob -> Option AQuick Check:
Class variables share references, so name = Bob [OK]
- Thinking p1 and p2 are independent copies
- Expecting 'Alice' as output
- Confusing class with struct behavior
struct Vehicle {
var speed: Int
}
struct Car: Vehicle {
var brand: String
}Solution
Step 1: Understand inheritance rules in Swift
In Swift, only classes support inheritance. Structs cannot inherit from other structs or classes.Step 2: Analyze the code
The code tries to makeCarinherit fromVehicle, both structs, which is invalid.Final Answer:
Structs cannot inherit from other structs or classes -> Option DQuick Check:
Inheritance = classes only, structs no [OK]
- Thinking structs can inherit
- Confusing initializer errors with inheritance
- Misreading colon syntax as error
Solution
Step 1: Identify the need for shared data
The requirement is that multiple parts share and modify the same user profile data, meaning shared references are needed.Step 2: Choose the correct Swift type
Classes are reference types that allow shared references and identity, so changes in one place reflect everywhere. Structs copy data, so changes do not propagate.Final Answer:
Use a class because it allows shared references and identity -> Option AQuick Check:
Shared data needs class reference type [OK]
- Choosing structs for shared mutable data
- Thinking structs support inheritance
- Believing classes cannot store properties
Ready to prove it?
Pass the test and this pattern moves unknown
