Computed properties let you create values that are calculated when you need them, not stored directly. They help keep your data fresh and up-to-date automatically.
Computed properties in Swift
var propertyName: Type { get { // return a computed value } set(newValue) { // update other properties based on newValue } }
The get block calculates and returns the value.
The set block updates other properties when you assign a new value.
var fullName: String { return "\(firstName) \(lastName)" }
var ageInMonths: Int { get { return age * 12 } set(newMonths) { age = newMonths / 12 } }
This program defines a rectangle with computed properties for area and perimeter. Changing the perimeter updates width and height to make a square.
struct Rectangle { var width: Double var height: Double var area: Double { return width * height } var perimeter: Double { get { return 2 * (width + height) } set(newPerimeter) { let side = newPerimeter / 4 width = side height = side } } } var rect = Rectangle(width: 4, height: 5) print("Area: \(rect.area)") print("Perimeter: \(rect.perimeter)") rect.perimeter = 20 print("New width: \(rect.width)") print("New height: \(rect.height)")
Computed properties do not store values themselves; they calculate them on demand.
You can omit the get keyword if the property is read-only and just return the value directly.
Use set only if you want to allow changing the computed property.
Computed properties calculate values dynamically instead of storing them.
They can have a getter to return a value and an optional setter to update related data.
They help keep your data consistent and your code clean.
Practice
Solution
Step 1: Understand property types in Swift
Stored properties hold fixed values, while computed properties calculate values dynamically.Step 2: Identify computed property behavior
Computed properties use code to return a value each time they are accessed instead of storing it.Final Answer:
A property that calculates its value dynamically when accessed -> Option CQuick Check:
Computed property = dynamic value calculation [OK]
- Confusing computed properties with stored properties
- Thinking computed properties store values permanently
- Assuming computed properties cannot have setters
Solution
Step 1: Recall computed property syntax
Computed properties use curly braces with a getter that returns a value.Step 2: Check each option
var area: Double { return width * height } correctly uses braces and return keyword. var area: Double = width * height is stored property syntax. var area: Double { width * height } misses return keyword. var area: Double get { width * height } has incorrect getter syntax.Final Answer:
var area: Double { return width * height } -> Option DQuick Check:
Computed property getter uses braces and return [OK]
- Omitting the return keyword inside getter
- Using equals sign instead of braces
- Incorrect getter syntax without braces
struct Rectangle {
var width: Double
var height: Double
var area: Double {
return width * height
}
}
let rect = Rectangle(width: 3, height: 4)
print(rect.area)
What is the output?Solution
Step 1: Understand the struct and computed property
Rectangle has width=3 and height=4. The computed property area returns width * height.Step 2: Calculate the area value
3 * 4 = 12.0, so rect.area returns 12.0.Final Answer:
12.0 -> Option BQuick Check:
3 * 4 = 12.0 [OK]
- Confusing stored and computed properties
- Expecting area to be zero by default
- Thinking code causes compilation error
struct Circle {
var radius: Double
var diameter: Double {
get {
return radius * 2
}
set {
radius = newValue / 2
}
}
}
let c = Circle(radius: 5)
c.diameter = 20
print(c.radius)Solution
Step 1: Analyze variable mutability
Variable 'c' is declared with 'let', making it immutable (constant).Step 2: Understand setter behavior
Setter tries to modify 'radius' property, but 'c' is constant, so assignment is not allowed.Final Answer:
Cannot assign to property 'radius' because 'c' is a constant -> Option AQuick Check:
Constant instance cannot change properties via setter [OK]
- Ignoring that 'let' makes instance immutable
- Thinking setter syntax is wrong
- Missing return keyword confusion
Temperature that stores a temperature in Celsius and has a computed property fahrenheit to get and set the temperature in Fahrenheit. Which implementation correctly updates Celsius when Fahrenheit is set?Solution
Step 1: Recall temperature conversion formulas
Fahrenheit = Celsius * 9/5 + 32; Celsius = (Fahrenheit - 32) * 5/9.Step 2: Check each option's formulas
struct Temperature { var celsius: Double var fahrenheit: Double { get { return celsius * 9 / 5 + 32 } set { celsius = (newValue - 32) * 5 / 9 } } } uses correct formulas in getter and setter. The other options use incorrect formulas.Final Answer:
The implementation with correct conversion formulas -> Option AQuick Check:
Correct formulas = struct Temperature { var celsius: Double var fahrenheit: Double { get { return celsius * 9 / 5 + 32 } set { celsius = (newValue - 32) * 5 / 9 } } } [OK]
- Mixing up Celsius and Fahrenheit formulas
- Using addition instead of multiplication
- Forgetting to update Celsius in setter
Ready to prove it?
Pass the test and this pattern moves unknown
