📖 Scenario: You are working on a Swift app that processes a list of numbers. You want to check how fast your code runs when doubling each number. This helps you make sure your app stays quick and smooth.
🎯 Goal: Build a simple performance test using Swift's measure block to time how long it takes to double numbers in an array.
📋 What You'll Learn
Create an array called numbers with the values [1, 2, 3, 4, 5]
Create a variable called doubledNumbers to store results
Use a measure block to time the doubling process
Print the doubledNumbers array after the test
💡 Why This Matters
🌍 Real World
Performance testing helps developers find slow parts in their apps and improve user experience by making code faster.
💼 Career
Knowing how to measure and optimize code speed is important for software engineers to build efficient and responsive applications.
Progress0 / 4 steps
1
Create the numbers array
Create an array called numbers with these exact values: [1, 2, 3, 4, 5]
Swift
Hint
Use let numbers = [1, 2, 3, 4, 5] to create the array.
2
Create the doubledNumbers variable
Create a variable called doubledNumbers and set it to an empty array of integers []
Swift
Hint
Use var doubledNumbers: [Int] = [] to create an empty array.
3
Use measure block to double numbers
Use measure block to time the process of doubling each number in numbers. Inside the block, use a for loop with number to multiply each by 2 and append to doubledNumbers
Swift
Hint
Use measure { ... } and inside it a for number in numbers loop to append doubled values.
4
Print the doubledNumbers array
Write print(doubledNumbers) to display the doubled numbers after the measure block
Swift
Hint
Use print(doubledNumbers) to show the result.
Practice
(1/5)
1. What is the main purpose of using measure blocks in Swift XCTest?
easy
A. To measure how long a piece of code takes to run
B. To check if the code compiles without errors
C. To test if the code produces the correct output
D. To count how many times a function is called
Solution
Step 1: Understand the role of measure blocks
measure blocks are used to time how long code takes to run repeatedly.
Step 2: Differentiate from other test purposes
Unlike checking correctness or compilation, measure focuses on performance timing.
Final Answer:
To measure how long a piece of code takes to run -> Option A
Quick Check:
Performance timing = A [OK]
Hint: Measure blocks check speed, not correctness or compilation [OK]
Common Mistakes:
Confusing performance test with correctness test
Thinking measure checks compilation errors
Assuming measure counts function calls
2. Which of the following is the correct syntax to start a performance test block in Swift XCTest?
easy
A. testPerformance { /* code to test */ }
B. measureBlock { /* code to test */ }
C. performanceTest { /* code to test */ }
D. measure { /* code to test */ }
Solution
Step 1: Recall XCTest performance syntax
The correct syntax uses measure { } to wrap the code to be timed.
Step 2: Identify incorrect options
Options B, C, and D are not valid XCTest methods for performance testing.
Final Answer:
measure { /* code to test */ } -> Option D
Quick Check:
Correct syntax = A [OK]
Hint: Use exactly 'measure { }' to start performance tests [OK]
Common Mistakes:
Using outdated or incorrect method names
Adding parentheses after measure incorrectly
Confusing with other test function names
3. What will be the output when running this Swift XCTest performance test?
func testExample() {
measure {
let sum = (1...1000).reduce(0, +)
print(sum)
}
}
medium
A. Prints nothing and reports average time
B. Prints 500500 multiple times and reports average time
C. Prints 1000 once and reports average time
D. Compilation error due to print inside measure
Solution
Step 1: Understand the code inside measure
The code sums numbers 1 to 1000, which equals 500500, then prints it.
Step 2: Know measure behavior
measure runs the block multiple times, so print outputs multiple times, plus it reports average time.
Final Answer:
Prints 500500 multiple times and reports average time -> Option B
Quick Check:
Repeated print of sum = C [OK]
Hint: measure runs code repeatedly, so prints repeat [OK]
Common Mistakes:
Thinking print runs only once
Assuming measure blocks suppress output
Expecting compilation error from print
4. Identify the error in this Swift XCTest performance test code:
B. measure block must not contain variable declarations
C. Cannot append to a constant array inside measure block
D. Array must be declared outside measure block
Solution
Step 1: Check array declaration
The array is declared with let, making it immutable (constant).
Step 2: Identify mutation attempt
Calling append(4) tries to change the constant array, causing a compile error.
Final Answer:
Cannot append to a constant array inside measure block -> Option C
Quick Check:
Appending to let array = D [OK]
Hint: Use var for arrays you want to change inside measure [OK]
Common Mistakes:
Thinking measure forbids variable declarations
Assuming array must be outside measure
Ignoring let vs var immutability
5. You want to measure the performance of sorting a large array but avoid including array creation time in the measurement. Which is the best way to write the test using measure?
hard
A. Create the array outside measure, then sort inside measure
B. Create the array inside the measure block, then sort it
C. Create and sort the array outside measure, then print inside measure
D. Create the array inside measure, but sort outside measure
Solution
Step 1: Understand what to measure
We want to measure only sorting time, not array creation time.
Step 2: Place array creation outside measure
Creating the array outside measure ensures creation time is excluded.
Step 3: Sort inside measure block
Sorting inside measure captures only sorting performance.
Final Answer:
Create the array outside measure, then sort inside measure -> Option A
Quick Check:
Exclude setup, measure only sorting = B [OK]
Hint: Put setup outside measure, test only target code inside [OK]
Common Mistakes:
Including setup time inside measure
Measuring nothing inside measure
Sorting outside measure by mistake
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.