Structs and classes are two ways to group data and behavior in Swift. Choosing between them helps you write clear and efficient code.
When you want simple data containers that don't need inheritance.
When you want to avoid accidental changes by copying data instead of sharing it.
When you need reference sharing and inheritance features.
When you want to manage memory carefully with reference counting.
When you want to model real-world objects that have identity.
Syntax
Swift
struct MyStruct {
var property: Int
}
class MyClass {
var property: Intinit(property: Int) {
self.property = property
}
}
Structs are value types: they are copied when assigned or passed around.
Classes are reference types: they share the same instance when assigned or passed around.
Examples
Changing p2 does not affect p1 because structs are copied.
Swift
struct Point {
var x: Intvar y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1
p2.x = 10print(p1.x) // prints 1print(p2.x) // prints 10
Changing person2 also changes person1 because classes share the same instance.
Swift
class Person {
var name: Stringinit(name: String) {
self.name = name
}
}
var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"print(person1.name) // prints Bobprint(person2.name) // prints Bob
Sample Program
This program shows how changing a struct copy does not affect the original, but changing a class copy does.
Swift
struct Car {
var model: String
}
class Bike {
var model: Stringinit(model: String) {
self.model = model
}
}
var car1 = Car(model: "Sedan")
var car2 = car1
car2.model = "Coupe"var bike1 = Bike(model: "Mountain")
var bike2 = bike1
bike2.model = "Road"print("car1 model: \(car1.model)")
print("car2 model: \(car2.model)")
print("bike1 model: \(bike1.model)")
print("bike2 model: \(bike2.model)")
OutputSuccess
Important Notes
Use structs for simple data that should not change unexpectedly.
Use classes when you need shared state or inheritance.
Remember that structs are thread-safe by default because they are copied.
Summary
Structs are copied; classes are shared.
Choose structs for simple, independent data.
Choose classes for shared, complex objects with identity.
Practice
(1/5)
1. Which statement best describes when to use a struct instead of a class in Swift?
easy
A. Use struct when you want to share data between multiple parts of your app.
B. Use struct when you need inheritance and shared references.
C. Use struct for simple data that should be copied when assigned or passed.
D. Use struct only for UI elements like views.
Solution
Step 1: Understand struct behavior
Structs are value types, meaning they are copied when assigned or passed around.
Step 2: Compare with class behavior
Classes are reference types, shared by multiple references and support inheritance.
Final Answer:
Use struct for simple data that should be copied when assigned or passed. -> Option C
2. Which of the following is the correct way to declare a struct in Swift?
easy
A. class Person { var name: String }
B. struct Person { var name: String }
C. struct Person: Class { var name: String }
D. class Person: struct { var name: String }
Solution
Step 1: Recall struct declaration syntax
In Swift, structs are declared with the keyword struct followed by the name and braces.
Step 2: Check each option
struct Person { var name: String } is correct. Using class is incorrect for structs. Structs cannot inherit from Class, and classes cannot inherit from struct.
Final Answer:
struct Person { var name: String } -> Option B
Quick Check:
Struct declaration = struct Name { } [OK]
Hint: Structs start with 'struct' keyword, not 'class' [OK]
Common Mistakes:
Using 'class' keyword to declare a struct
Trying to inherit from a class in a struct
Mixing struct and class syntax
3. Consider this Swift code:
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1
p2.x = 10
print(p1.x)
What is the output?
medium
A. 1
B. 10
C. 0
D. Compilation error
Solution
Step 1: Understand struct copying behavior
Assigning p1 to p2 copies the data because Point is a struct (value type).
Step 2: Analyze mutation effect
Changing p2.x to 10 does not affect p1.x, which remains 1.
Final Answer:
1 -> Option A
Quick Check:
Struct copy means original unchanged = 1 [OK]
Hint: Structs copy on assignment; original stays same [OK]
Common Mistakes:
Assuming p1.x changes when p2.x changes
Confusing structs with classes (reference types)
Expecting runtime error on mutation
4. This Swift code tries to share data between two variables:
class Counter {
var count = 0
}
var c1 = Counter()
var c2 = c1
c2.count = 5
print(c1.count)
But the output is not as expected. What is the problem?
medium
A. Counter is a class, so c1 and c2 share the same instance
B. Counter is a class, but c2 is a copy, so changes don't reflect
C. Counter should be a struct to share data
D. Counter needs to conform to a protocol to share data
Solution
Step 1: Identify class reference behavior
Classes are reference types, so c1 and c2 point to the same object.
Step 2: Understand shared mutation
Changing c2.count to 5 changes the shared instance, so c1.count also becomes 5.
Final Answer:
Counter is a class, so c1 and c2 share the same instance -> Option A
Quick Check:
Classes share references = shared data [OK]
Hint: Classes share instances; structs copy data [OK]
Common Mistakes:
Thinking classes copy on assignment
Expecting structs to share data
Believing protocols affect sharing automatically
5. You are designing a Swift app that tracks user sessions. Each session has a unique ID and mutable state shared across multiple parts of the app. Which type should you choose and why?
Options: A) Use a struct because it copies data and avoids bugs. B) Use a class because it allows shared mutable state with identity. C) Use a struct with inheritance to share state. D) Use a class but avoid mutability to keep data safe.
hard
A. Use a struct because it copies data and avoids bugs.
B. Use a class but avoid mutability to keep data safe.
C. Use a struct with inheritance to share state.
D. Use a class because it allows shared mutable state with identity.
Solution
Step 1: Analyze requirements for shared mutable state
The session data must be shared and mutable across multiple parts, requiring a single shared instance.
Step 2: Choose between struct and class
Structs copy data, so changes in one copy won't reflect elsewhere. Classes share references and support identity, fitting the need.
Step 3: Evaluate other options
Structs do not support inheritance, so Use a struct with inheritance to share state. is invalid. Avoiding mutability in classes (Use a class but avoid mutability to keep data safe.) contradicts the requirement for mutable shared state.
Final Answer:
Use a class because it allows shared mutable state with identity. -> Option D
Quick Check:
Shared mutable state = class [OK]
Hint: Shared mutable data needs class, not struct [OK]
Common Mistakes:
Choosing struct for shared mutable state
Thinking structs support inheritance
Avoiding mutability in classes when needed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.