0
0
Swiftprogramming~10 mins

Why classes exist alongside structs in Swift - Visual Breakdown

Choose your learning style9 modes available
Concept Flow - Why classes exist alongside structs
Start: Define Struct and Class
Struct: Value Type - Copies Data
Class: Reference Type - Shares Data
Use Case: When to use Struct
Use Case: When to use Class
End: Both coexist for different needs
This flow shows why Swift has both structs and classes: structs copy data, classes share references, so each fits different needs.
Execution Sample
Swift
struct Point {
  var x: Int
  var y: Int
}

class Person {
  var name: String
  init(name: String) { self.name = name }
}
Defines a struct Point (value type) and a class Person (reference type) to show their basic difference.
Execution Table
StepActionVariable/InstanceValue/StateNote
1Create Point p1p1x=10, y=20Struct instance created
2Copy p1 to p2p2x=10, y=20p2 is a copy, independent
3Change p2.x to 30p2x=30, y=20Only p2 changes
4Check p1.xp1x=10, y=20p1 unchanged, shows value type
5Create Person person1person1name='Alice'Class instance created
6Assign person1 to person2person2name='Alice'person2 references same object
7Change person2.name to 'Bob'person2name='Bob'Changes reflect on both references
8Check person1.nameperson1name='Bob'person1 sees updated name
9EndExecution stops after showing value vs reference behavior
💡 Execution stops after demonstrating how structs copy data and classes share references.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6After 7After 8Final
p1nilx=10,y=20x=10,y=20x=10,y=20x=10,y=20x=10,y=20x=10,y=20x=10,y=20x=10,y=20x=10,y=20
p2nilnilx=10,y=20x=30,y=20x=30,y=20x=30,y=20x=30,y=20x=30,y=20x=30,y=20x=30,y=20
person1nilnilnilnilnilname='Alice'name='Alice'name='Bob'name='Bob'name='Bob'
person2nilnilnilnilnilnilname='Alice'name='Bob'name='Bob'name='Bob'
Key Moments - 3 Insights
Why does changing p2.x not affect p1.x?
Because p1 and p2 are structs (value types), copying p1 to p2 creates a separate copy. Changing p2.x only affects p2, as shown in execution_table step 3 and 4.
Why does changing person2.name also change person1.name?
Because person1 and person2 are references to the same class instance. Changing person2.name changes the shared object, so person1.name reflects that too, as seen in steps 7 and 8.
When should I use a struct instead of a class?
Use structs when you want independent copies of data (value semantics). Use classes when you want shared, mutable state (reference semantics). This is the core reason both exist.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 4, what is the value of p1.x?
A20
B30
C10
Dnil
💡 Hint
Check the 'Value/State' column for p1 at step 4 in execution_table.
At which step does changing person2.name affect person1.name?
AStep 3
BStep 7
CStep 5
DStep 2
💡 Hint
Look at steps 6, 7, and 8 in execution_table for person1 and person2 name changes.
If Point was a class instead of a struct, what would happen when copying p1 to p2?
Ap2 would reference the same object as p1
Bp2 would be nil
Cp2 would be a separate copy with independent values
Dp2 would cause a compile error
💡 Hint
Recall that classes are reference types as shown by person1 and person2 behavior in execution_table.
Concept Snapshot
Swift has structs (value types) and classes (reference types).
Structs copy data when assigned or passed.
Classes share references, so changes affect all references.
Use structs for simple, independent data.
Use classes for shared, mutable state or inheritance.
Full Transcript
This visual execution shows why Swift has both classes and structs. Structs are value types, so when you copy them, you get a new independent copy. Classes are reference types, so copying just shares the same object. We create a Point struct and a Person class. Copying Point creates a new copy, so changing one does not affect the other. Copying Person shares the same object, so changing one reference changes the other. This explains why both exist: structs for independent data, classes for shared data.