A struct is a value type that stores data and copies itself when assigned or passed around. It is often used for simple data containers.
Click to reveal answer
beginner
What is a class in Swift?
A class is a reference type that stores data and shares the same instance when assigned or passed around. It supports inheritance and reference counting.
Click to reveal answer
intermediate
How do structs and classes differ in memory behavior?
Structs copy their data when assigned or passed, so each variable has its own copy. Classes share the same instance, so changes affect all references.
Click to reveal answer
intermediate
Can structs inherit from other structs or classes?
No, structs cannot inherit from other structs or classes. Only classes support inheritance in Swift.
Click to reveal answer
beginner
When should you choose a struct over a class in Swift?
Choose a struct when you want simple, safe data containers that copy on assignment and don’t need inheritance or shared state.
Click to reveal answer
Which of the following is true about Swift structs?
AThey are reference types.
BThey support inheritance.
CThey are value types and copy on assignment.
DThey cannot have methods.
✗ Incorrect
Structs are value types and copy their data when assigned or passed. They do not support inheritance but can have methods.
What happens when you assign a class instance to a new variable?
AA new copy of the instance is created.
BThe new variable points to the same instance.
CThe instance is deleted.
DThe instance becomes immutable.
✗ Incorrect
Classes are reference types, so assigning them copies the reference, not the data. Both variables point to the same instance.
Which feature is only available in classes but not structs?
AInheritance
BStored properties
CMethods
DInitializers
✗ Incorrect
Only classes support inheritance in Swift. Structs cannot inherit from other types.
Why might you prefer structs for simple data models?
ABecause they are reference types.
BBecause they automatically share data.
CBecause they support inheritance.
DBecause they copy data, avoiding unexpected changes.
✗ Incorrect
Structs copy their data on assignment, so each variable has its own copy, which helps avoid bugs from shared state.
Which of these is NOT a characteristic of Swift classes?
ACopies data on assignment
BSupports inheritance
CReference type
DCan have deinitializers
✗ Incorrect
Classes do not copy data on assignment; they share references. Structs copy data on assignment.
Explain the main differences between structs and classes in Swift.
Think about how data is stored and shared.
You got /4 concepts.
When would you choose a struct instead of a class for your data model in an iOS app?
Consider safety and simplicity.
You got /4 concepts.
Practice
(1/5)
1. Which statement correctly describes the difference between struct and class in Swift?
easy
A. class is copied on assignment but struct is shared.
B. struct is a value type and class is a reference type.
C. struct supports inheritance but class does not.
D. struct can only have stored properties, class cannot.
Solution
Step 1: Understand value vs reference types
In Swift, struct is a value type, meaning it is copied when assigned or passed around. class is a reference type, meaning instances share the same reference.
Step 2: Evaluate each option
struct is a value type and class is a reference type. correctly states the difference. struct supports inheritance but class does not. is wrong because struct does not support inheritance. class is copied on assignment but struct is shared. reverses the behavior. struct can only have stored properties, class cannot. is false because class can have stored properties.
Final Answer:
struct is a value type and class is a reference type. -> Option B
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: String { var name }
C. struct Person = { var name: String }
D. struct Person { var name: String }
Solution
Step 1: Recall Swift struct syntax
A struct is declared with the keyword struct, followed by the name and curly braces containing properties.
Step 2: Check each option
struct Person { var name: String } matches the correct syntax: struct Person { var name: String }. class Person { var name: String } uses class, not struct. struct Person = { var name: String } uses an invalid assignment syntax. struct Person: String { var name } incorrectly tries to inherit from String and misses type for name.
Final Answer:
struct Person { var name: String } -> Option D
Quick Check:
Struct declaration uses struct Name { } [OK]
Hint: Use 'struct Name { var property: Type }' for structs [OK]
Common Mistakes:
Using class keyword instead of struct
Incorrect syntax with equals sign
Missing type annotation for properties
3. Consider the following Swift code:
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1
p2.x = 5
print(p1.x)
What will be printed?
medium
A. 1
B. 5
C. 0
D. Compilation error
Solution
Step 1: Understand struct copying behavior
Since Point is a struct (value type), assigning p1 to p2 copies the data. They are independent.
Step 2: Analyze mutation and print
Changing p2.x to 5 does not affect p1.x. So p1.x remains 1. The print statement outputs 1.
Final Answer:
1 -> Option A
Quick Check:
Structs copy on assignment, so original stays unchanged [OK]
Hint: Structs copy on assignment; changes don't affect original [OK]
Common Mistakes:
Assuming p1.x changes when p2.x changes
Confusing structs with classes (reference types)
Expecting runtime error on mutation
4. The following Swift code tries to modify a property of a struct instance inside a function but causes a compile error:
struct Counter {
var count: Int
}
func increment(counter: Counter) {
counter.count += 1
}
What is the main reason for the error?
medium
A. Function parameter 'counter' is a constant by default
B. Struct properties cannot be modified inside functions
C. You cannot use '+=' operator on Int
D. Counter must be a class to modify properties
Solution
Step 1: Understand function parameter mutability
In Swift, function parameters are constants by default. You cannot modify them inside the function.
Step 2: Analyze the error cause
The parameter counter is a struct instance passed by value but immutable inside the function. Trying to change counter.count causes a compile error.
Final Answer:
Function parameter 'counter' is a constant by default -> Option A
Quick Check:
Function parameters are immutable unless marked inout [OK]
Hint: Function parameters are constants unless 'inout' is used [OK]
Common Mistakes:
Thinking structs can't have mutable properties
Believing '+=' is invalid for Int
Assuming classes are required for mutation
5. You want to create a Swift type to represent a user profile that can be shared and updated across your app without copying. Which should you choose and why?
struct UserProfile {
var name: String
var age: Int
}
class UserProfileClass {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
hard
A. Use struct because it copies data and prevents accidental changes.
B. Use class because structs cannot have properties.
C. Use class because it shares references and updates reflect everywhere.
D. Use struct because classes cannot have initializers.
Solution
Step 1: Identify sharing vs copying needs
If you want updates to reflect everywhere (shared state), you need a reference type.
Step 2: Match type to behavior
class is a reference type, so instances are shared. struct copies data, so changes won't reflect across copies.
Final Answer:
Use class because it shares references and updates reflect everywhere. -> Option C
Quick Check:
Shared mutable state = class [OK]
Hint: Choose class for shared mutable data, struct for copies [OK]
Common Mistakes:
Choosing struct when shared updates are needed
Thinking classes can't have initializers
Believing structs can't have properties
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.