Switch with where clauses in Swift - Time & Space Complexity
We want to understand how the time it takes to run a switch statement with where clauses changes as the input grows.
Specifically, how many checks does the program do when matching cases with conditions?
Analyze the time complexity of the following code snippet.
let numbers = [1, 2, 3, 4, 5]
for number in numbers {
switch number {
case let x where x % 2 == 0:
print("Even number: \(x)")
case let x where x % 2 != 0:
print("Odd number: \(x)")
default:
print("Unknown")
}
}
This code goes through a list of numbers and uses a switch with where clauses to check if each number is even or odd.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that goes through each number in the array.
- How many times: Once for each number in the list (n times).
- Inside the loop, the switch checks conditions, but these are a fixed small number of checks per item.
As the list gets bigger, the program checks each number once with a few conditions.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 checks |
| 100 | About 100 checks |
| 1000 | About 1000 checks |
Pattern observation: The number of checks grows directly with the number of items.
Time Complexity: O(n)
This means the time to run grows in a straight line with the number of items to check.
[X] Wrong: "The where clauses make the switch run slower for each item because they add extra loops."
[OK] Correct: Each where clause is just a simple condition checked once per item, not a loop. So it doesn't multiply the work by more than a small constant.
Understanding how switch statements with conditions scale helps you explain your code's efficiency clearly and confidently.
"What if we added a nested loop inside the switch cases? How would the time complexity change?"
Practice
What does a where clause do in a Swift switch statement?
Solution
Step 1: Understand the role of where clause
Thewhereclause adds an extra condition to a case in aswitchstatement.Step 2: Compare with other options
Other options describe unrelated behaviors like default case or type changes, which are not whatwheredoes.Final Answer:
It adds an extra condition to a case to check before matching. -> Option BQuick Check:
where clause = extra condition [OK]
- Thinking where defines default case
- Confusing where with case repetition
- Assuming where changes variable types
Which of the following is the correct syntax for a switch case with a where clause in Swift?
let number = 10
switch number {
case let x where x > 5:
print("Greater than 5")
default:
print("5 or less")
}Solution
Step 1: Identify correct pattern binding syntax
In Swift, to bind a value in a case, uselet xbefore thewhereclause.Step 2: Check the where clause usage
Thewhereclause follows the pattern binding, socase let x where x > 5:is correct.Final Answer:
case let x where x > 5: -> Option CQuick Check:
Pattern binding with let + where clause = case let x where x > 5: [OK]
- Omitting 'let' before variable
- Using 'if' instead of 'where'
- Placing 'where' before 'let'
What will be printed by this Swift code?
let age = 20
switch age {
case let x where x < 13:
print("Child")
case let x where x >= 13 && x < 20:
print("Teenager")
case let x where x >= 20:
print("Adult")
default:
print("Unknown")
}Solution
Step 1: Check the value of age
The variableageis 20.Step 2: Evaluate each case condition
First case: x < 13? No (20 < 13 is false). Second case: 13 <= x < 20? No (20 < 20 is false). Third case: x >= 20? Yes (20 >= 20 is true).Final Answer:
Adult -> Option AQuick Check:
age 20 matches 'Adult' case [OK]
- Choosing 'Teenager' because 20 is close to 19
- Ignoring >= and < operators
- Forgetting switch stops at first match
Identify the error in this Swift switch statement using where clauses:
let score = 85
switch score {
case let x where x > 90:
print("Excellent")
case let x where x >= 80:
print("Good")
case let x where x >= 70:
print("Average")
case _:
print("Poor")
}Solution
Step 1: Analyze case conditions and order
The cases check if score > 90, then >= 80, then >= 70. Since 85 >= 80 and also >= 70, the second case matches first.Step 2: Understand overlapping conditions effect
Because cases overlap, order matters. If order was different, output might change. This can cause confusion or wrong matching.Final Answer:
The cases overlap and order causes wrong matching. -> Option DQuick Check:
Overlapping where clauses need careful order [OK]
- Ignoring overlapping conditions
- Assuming default case is mandatory
- Thinking let binding disallowed with where
You want to categorize a number as "Small", "Medium", or "Large" using a switch with where clauses. The rules are:
- Small: less than 10
- Medium: between 10 and 100 inclusive
- Large: greater than 100
Which switch statement correctly implements this?
let value = 50
switch value {
case let x where x < 10:
print("Small")
case let x where x >= 10 && x <= 100:
print("Medium")
case let x where x > 100:
print("Large")
default:
print("Unknown")
}Solution
Step 1: Check each case condition against rules
First case: x < 10 matches "Small". Second case: x >= 10 and x <= 100 matches "Medium". Third case: x > 100 matches "Large".Step 2: Verify coverage and syntax
All values fit one of these cases. Syntax is correct withlet x whereclauses. Default is fallback but not needed here.Final Answer:
Correctly categorizes all values as per rules. -> Option AQuick Check:
Conditions cover all ranges correctly [OK]
- Overlapping ranges causing wrong matches
- Missing <= or >= in conditions
- Forgetting to bind variable with let
Ready to prove it?
Pass the test and this pattern moves unknown
