A computed property calculates a value each time it is accessed instead of storing it. It uses a getter and optionally a setter to compute the value dynamically.
Click to reveal answer
beginner
How do you define a read-only computed property in Swift?
You define a computed property with only a getter, like this:
var area: Double { return width * height }
This property calculates and returns the area without storing it.
Click to reveal answer
intermediate
Can computed properties have setters in Swift? What does that mean?
Yes, computed properties can have setters. This means you can assign a value to the property, and the setter will run code to update other properties or perform actions based on the new value.
Click to reveal answer
beginner
Why use computed properties instead of stored properties?
Computed properties save memory because they don’t store values. They always provide up-to-date values based on other data, making your code cleaner and more flexible.
Click to reveal answer
beginner
Example: How to add a computed property 'fullName' combining 'firstName' and 'lastName'?
You can write:
var fullName: String { return "\(firstName) \(lastName)" }
This property returns the full name by joining first and last names.
Click to reveal answer
What does a computed property in Swift do?
AIs only used for constants
BStores a fixed value in memory
CCalculates its value every time it is accessed
DCannot have a setter
✗ Incorrect
Computed properties calculate their value dynamically each time you access them.
Which keyword is used to define a computed property in Swift?
Avar
Blet
Cfunc
Dclass
✗ Incorrect
Computed properties are defined using 'var' because their value can change.
Can a computed property have a setter in Swift?
AOnly inside classes
BNo, computed properties are read-only
COnly if marked with 'let'
DYes, to update other properties when assigned
✗ Incorrect
Computed properties can have setters to allow assigning values that update other data.
What happens if you omit the setter in a computed property?
AThe property cannot be accessed
BThe property becomes read-only
CThe property stores a value
DThe code will not compile
✗ Incorrect
Without a setter, the computed property is read-only and only has a getter.
Why might you choose a computed property over a stored property?
ATo always get up-to-date values without extra storage
BTo save the value permanently
CTo make the property constant
DTo avoid using functions
✗ Incorrect
Computed properties calculate values on demand, so they don’t use extra memory and always reflect current data.
Explain what a computed property is and how it differs from a stored property in Swift.
Think about how the value is provided or stored.
You got /3 concepts.
Write a simple example of a computed property that returns the full name by combining first and last names.
Use string interpolation inside the getter.
You got /3 concepts.
Practice
(1/5)
1. What is a computed property in Swift?
easy
A. A property that calculates a value instead of storing it.
B. A property that stores a fixed value only.
C. A property that can only be set once.
D. A property that is always optional.
Solution
Step 1: Understand property types in Swift
Stored properties hold data directly, while computed properties calculate values when accessed.
Step 2: Identify computed property behavior
Computed properties use get (and optionally set) to calculate values dynamically instead of storing them.
Final Answer:
A property that calculates a value instead of storing it. -> Option A
Quick Check:
Computed property = calculates value [OK]
Hint: Computed properties calculate values on demand, not store them [OK]
Common Mistakes:
Confusing computed properties with stored properties
Thinking computed properties always store data
Assuming computed properties cannot have setters
2. Which of the following is the correct syntax to add a computed property area to a struct Square that returns side * side?
easy
A. func area() -> Int { side * side }
B. var area: Int { return side * side }
C. var area: Int = side * side
D. let area = side * side
Solution
Step 1: Recognize computed property syntax
Computed properties use curly braces with a get block or implicit return inside braces.
Step 2: Match syntax to the options
var area: Int { return side * side } uses var area: Int { return side * side }, which is correct for a computed property. var area: Int = side * side tries to assign directly, which is invalid for computed properties.
Final Answer:
var area: Int { return side * side } -> Option B
Quick Check:
Computed property syntax = var name: Type { return value } [OK]
Hint: Use braces and return for computed properties, not direct assignment [OK]
Common Mistakes:
Using '=' instead of braces for computed properties
Defining computed property as a function
Using 'let' instead of 'var' for computed properties
3. What will be the output of this Swift code?
struct Circle {
var radius: Double
var diameter: Double {
get { radius * 2 }
set { radius = newValue / 2 }
}
}
var c = Circle(radius: 5)
c.diameter = 20
print(c.radius)
medium
A. 5.0
B. Syntax error
C. 20.0
D. 10.0
Solution
Step 1: Understand the computed property setter
Setting c.diameter = 20 triggers the set block, which sets radius = newValue / 2. So radius becomes 20 / 2 = 10.
Step 2: Print the updated radius
After setting diameter, printing c.radius outputs 10.0.
Final Answer:
10.0 -> Option D
Quick Check:
Setter updates radius to 10.0 [OK]
Hint: Setter changes radius to half the diameter value [OK]
Common Mistakes:
Ignoring the setter and expecting radius unchanged
Confusing diameter and radius values
Assuming syntax error due to setter
4. Identify the error in this computed property code:
struct Rectangle {
var width: Double
var height: Double
var area: Double {
get { width * height }
set { width = newValue / height }
}
}
medium
A. width and height must be constants (let).
B. Getter must have parentheses after width * height.
C. Setter can cause division by zero if height is zero.
D. Computed properties cannot have setters.
Solution
Step 1: Analyze the setter logic
The setter divides newValue by height. If height is zero, this causes a runtime error (division by zero).
Step 2: Check other options
Getter syntax is correct without parentheses. Computed properties can have setters. Variables can be var. So only the setter can cause division by zero if height is zero.
Final Answer:
Setter can cause division by zero if height is zero. -> Option C
Quick Check:
Division by zero risk in setter = Setter can cause division by zero if height is zero. [OK]
Hint: Check for zero in divisor inside setter to avoid runtime errors [OK]
Common Mistakes:
Thinking getter needs parentheses
Believing computed properties can't have setters
Assuming width and height must be constants
5. You want to add a computed property fullName to this struct that combines firstName and lastName with a space, and also allows setting both names by splitting the input string. Which code correctly implements this?
struct Person {
var firstName: String
var lastName: String
// Add fullName computed property here
}
hard
A. var fullName: String {
get { "\(firstName) \(lastName)" }
set {
let parts = newValue.split(separator: " ")
if parts.count == 2 {
firstName = String(parts[0])
lastName = String(parts[1])
}
}
}
B. var fullName: String {
return "\(firstName) \(lastName)"
}
C. var fullName: String {
get { firstName + lastName }
set { firstName = newValue }
}
D. var fullName: String = ""
Solution
Step 1: Understand the requirements
The computed property must combine first and last names with a space in the getter, and split the input string to set both names in the setter.
Step 2: Evaluate each option
var fullName: String {
get { "\(firstName) \(lastName)" }
set {
let parts = newValue.split(separator: " ")
if parts.count == 2 {
firstName = String(parts[0])
lastName = String(parts[1])
}
}
} correctly implements a getter returning "firstName lastName" and a setter splitting the input string into two parts to assign firstName and lastName. var fullName: String {
return "\(firstName) \(lastName)"
} lacks a setter. var fullName: String {
get { firstName + lastName }
set { firstName = newValue }
} concatenates without space and sets only firstName. var fullName: String = "" is a stored property, not computed.
Final Answer:
var fullName: String {
get { "\(firstName) \(lastName)" }
set {
let parts = newValue.split(separator: " ")
if parts.count == 2 {
firstName = String(parts[0])
lastName = String(parts[1])
}
}
} -> Option A
Quick Check:
Computed property with get and set splitting string = var fullName: String {
get { "\(firstName) \(lastName)" }
set {
let parts = newValue.split(separator: " ")
if parts.count == 2 {
firstName = String(parts[0])
lastName = String(parts[1])
}
}
} [OK]
Hint: Use get for combining and set for splitting names [OK]
Common Mistakes:
Omitting the setter for fullName
Not splitting the input string correctly
Using stored property instead of computed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.