Bird
Raised Fist0
Swiftprogramming~5 mins

Comparing structs vs classes decision in Swift - Performance Comparison

Choose your learning style10 modes available
Time Complexity: Comparing structs vs classes decision
O(n)
Understanding Time Complexity

When choosing between structs and classes in Swift, it's important to understand how their operations grow as your data size increases.

We want to see how the time cost changes when working with many instances of each type.

Scenario Under Consideration

Analyze the time complexity of creating and copying structs versus classes.


struct PointStruct {
  var x: Int
  var y: Int
}

class PointClass {
  var x: Int
  var y: Int
  init(x: Int, y: Int) {
    self.x = x
    self.y = y
  }
}

// Creating and copying 1000 instances
var structPoints = [PointStruct]()
var classPoints = [PointClass]()
for i in 0..<1000 {
  structPoints.append(PointStruct(x: i, y: i))
  classPoints.append(PointClass(x: i, y: i))
}

// Copying struct array
let copiedStructPoints = structPoints

// Copying class array
let copiedClassPoints = classPoints

This code creates arrays of structs and classes, then copies the arrays to compare how copying behaves.

Identify Repeating Operations

Look for loops and copying actions that repeat work.

  • Primary operation: Loop creating 1000 instances of structs and classes.
  • How many times: 1000 times for creation; copying arrays happens once but behaves differently.
How Execution Grows With Input

Creating instances grows linearly with the number of items.

Input Size (n)Approx. Operations
1010 creations
100100 creations
10001000 creations

Copying struct arrays duplicates all data, so operations grow with n. Copying class arrays only copies references, so it stays almost constant.

Final Time Complexity

Time Complexity: O(n)

This means the time to create or copy grows directly with the number of items.

Common Mistake

[X] Wrong: "Copying a class array duplicates all objects like structs."

[OK] Correct: Copying a class array only copies references, not the objects themselves, so it is much faster than copying structs.

Interview Connect

Understanding how structs and classes behave with copying helps you explain performance choices clearly and confidently in real projects.

Self-Check

What if we changed the struct to contain a large array? How would copying the struct array affect time complexity?

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

  1. Step 1: Understand struct behavior

    Structs are value types, meaning they are copied when assigned or passed around.
  2. Step 2: Compare with class behavior

    Classes are reference types, shared by multiple references and support inheritance.
  3. Final Answer:

    Use struct for simple data that should be copied when assigned or passed. -> Option C
  4. Quick Check:

    Structs = copied data [OK]
Hint: Structs copy data; classes share references [OK]
Common Mistakes:
  • Confusing structs with classes as reference types
  • Thinking structs support inheritance
  • Using structs for shared mutable state
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

  1. Step 1: Recall struct declaration syntax

    In Swift, structs are declared with the keyword struct followed by the name and braces.
  2. 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.
  3. Final Answer:

    struct Person { var name: String } -> Option B
  4. 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

  1. Step 1: Understand struct copying behavior

    Assigning p1 to p2 copies the data because Point is a struct (value type).
  2. Step 2: Analyze mutation effect

    Changing p2.x to 10 does not affect p1.x, which remains 1.
  3. Final Answer:

    1 -> Option A
  4. 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

  1. Step 1: Identify class reference behavior

    Classes are reference types, so c1 and c2 point to the same object.
  2. Step 2: Understand shared mutation

    Changing c2.count to 5 changes the shared instance, so c1.count also becomes 5.
  3. Final Answer:

    Counter is a class, so c1 and c2 share the same instance -> Option A
  4. 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

  1. Step 1: Analyze requirements for shared mutable state

    The session data must be shared and mutable across multiple parts, requiring a single shared instance.
  2. 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.
  3. 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.
  4. Final Answer:

    Use a class because it allows shared mutable state with identity. -> Option D
  5. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard