Bird
Raised Fist0
Swiftprogramming~10 mins

Computed properties in Swift - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Computed properties
Start
↓
Access computed property
↓
Run getter code
↓
Return computed value
↓
Use value
↓
Optional: Set computed property
↓
Run setter code
↓
Update internal state
↓
End
When you access a computed property, Swift runs its getter code to calculate and return a value. If you set it, the setter code runs to update internal data.
Execution Sample
Swift
struct Rectangle {
  var width: Double
  var height: Double
  var area: Double {
    return width * height
  }
}
Defines a Rectangle with width and height, and a computed property area that calculates width times height.
Execution Table
StepActionCode ExecutedResult/Value
1Create Rectangle instancelet rect = Rectangle(width: 3, height: 4)rect.width = 3, rect.height = 4
2Access computed property 'area'rect.areaRuns getter: return 3 * 4
3Getter returns valuereturn width * height12
4Use computed valueprint(rect.area)12
5End--
💡 No setter used; execution ends after getter returns computed value.
Variable Tracker
VariableStartAfter Step 1After Step 2Final
rect.width-333
rect.height-444
rect.area (computed)---12 (computed on access)
Key Moments - 2 Insights
Why doesn't the computed property 'area' store a value?
Because 'area' runs code every time you access it (see execution_table step 2 and 3), it calculates the value on the fly instead of storing it.
What happens if you try to set 'area' in this example?
This 'area' has no setter defined, so trying to set it will cause a compile error. The execution_table shows only getter usage.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what value does 'rect.area' return at step 3?
A0
B7
C12
DError
💡 Hint
Check the 'Result/Value' column at step 3 in execution_table.
At which step is the computed property 'area' accessed?
AStep 1
BStep 2
CStep 4
DStep 5
💡 Hint
Look for 'Access computed property' in the 'Action' column of execution_table.
If you add a setter to 'area', what would change in the execution_table?
AA new step for setting 'area' would appear
BThe getter would stop running
CThe rectangle's width and height would become constants
DNo change at all
💡 Hint
Think about what happens when you set a computed property with a setter (see concept_flow).
Concept Snapshot
Computed properties in Swift look like variables but run code when accessed.
Use 'var name: Type { get { ... } set { ... } }' syntax.
Getter runs on access to calculate value.
Setter runs on assignment to update data.
They do not store values directly.
Useful for dynamic values based on other properties.
Full Transcript
This example shows a Swift struct Rectangle with width and height stored properties and a computed property area. When you create a Rectangle instance with width 3 and height 4, those values are stored. When you access rect.area, Swift runs the getter code which multiplies width and height and returns 12. This value is not stored but calculated each time. The execution table traces these steps clearly. If you try to set area, it would cause an error because no setter is defined. Computed properties let you create dynamic values that update automatically based on other data.

Practice

(1/5)
1. What is a computed property in Swift?
easy
A. A property that can only be set but not read
B. A property that stores a fixed value permanently
C. A property that calculates its value dynamically when accessed
D. A property that is declared outside a class or struct

Solution

  1. Step 1: Understand property types in Swift

    Stored properties hold fixed values, while computed properties calculate values dynamically.
  2. Step 2: Identify computed property behavior

    Computed properties use code to return a value each time they are accessed instead of storing it.
  3. Final Answer:

    A property that calculates its value dynamically when accessed -> Option C
  4. Quick Check:

    Computed property = dynamic value calculation [OK]
Hint: Computed properties calculate values on demand, not stored [OK]
Common Mistakes:
  • Confusing computed properties with stored properties
  • Thinking computed properties store values permanently
  • Assuming computed properties cannot have setters
2. Which of the following is the correct syntax for a computed property with a getter in Swift?
easy
A. var area: Double get { width * height }
B. var area: Double = width * height
C. var area: Double { get { width * height } }
D. var area: Double { return width * height }

Solution

  1. Step 1: Recall computed property syntax

    Computed properties use curly braces with a getter that returns a value.
  2. 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.
  3. Final Answer:

    var area: Double { return width * height } -> Option D
  4. Quick Check:

    Computed property getter uses braces and return [OK]
Hint: Use braces and return keyword for computed property getter [OK]
Common Mistakes:
  • Omitting the return keyword inside getter
  • Using equals sign instead of braces
  • Incorrect getter syntax without braces
3. Consider this Swift struct:
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?
medium
A. Compilation error
B. 12.0
C. 0.0
D. 7.0

Solution

  1. Step 1: Understand the struct and computed property

    Rectangle has width=3 and height=4. The computed property area returns width * height.
  2. Step 2: Calculate the area value

    3 * 4 = 12.0, so rect.area returns 12.0.
  3. Final Answer:

    12.0 -> Option B
  4. Quick Check:

    3 * 4 = 12.0 [OK]
Hint: Multiply width and height to get area from computed property [OK]
Common Mistakes:
  • Confusing stored and computed properties
  • Expecting area to be zero by default
  • Thinking code causes compilation error
4. Identify the error in this Swift code using a computed property:
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)
medium
A. Cannot assign to property 'radius' because 'c' is a constant
B. Missing return keyword in getter
C. Setter syntax is incorrect
D. No error, code runs and prints 10

Solution

  1. Step 1: Analyze variable mutability

    Variable 'c' is declared with 'let', making it immutable (constant).
  2. Step 2: Understand setter behavior

    Setter tries to modify 'radius' property, but 'c' is constant, so assignment is not allowed.
  3. Final Answer:

    Cannot assign to property 'radius' because 'c' is a constant -> Option A
  4. Quick Check:

    Constant instance cannot change properties via setter [OK]
Hint: Use var, not let, to allow property setters to modify instance [OK]
Common Mistakes:
  • Ignoring that 'let' makes instance immutable
  • Thinking setter syntax is wrong
  • Missing return keyword confusion
5. You want to create a Swift struct 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?
hard
A. struct Temperature { var celsius: Double var fahrenheit: Double { get { return celsius * 9 / 5 + 32 } set { celsius = (newValue - 32) * 5 / 9 } } }
B. struct Temperature { var celsius: Double var fahrenheit: Double { get { return celsius + 32 } set { celsius = newValue - 32 } } }
C. struct Temperature { var celsius: Double var fahrenheit: Double { get { return celsius * 2 + 30 } set { celsius = (newValue - 30) / 2 } } }
D. struct Temperature { var celsius: Double var fahrenheit: Double { get { return celsius * 5 / 9 + 32 } set { celsius = (newValue - 32) * 9 / 5 } } }

Solution

  1. Step 1: Recall temperature conversion formulas

    Fahrenheit = Celsius * 9/5 + 32; Celsius = (Fahrenheit - 32) * 5/9.
  2. 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.
  3. Final Answer:

    The implementation with correct conversion formulas -> Option A
  4. Quick Check:

    Correct formulas = struct Temperature { var celsius: Double var fahrenheit: Double { get { return celsius * 9 / 5 + 32 } set { celsius = (newValue - 32) * 5 / 9 } } } [OK]
Hint: Use correct math formulas for temperature conversion in getter/setter [OK]
Common Mistakes:
  • Mixing up Celsius and Fahrenheit formulas
  • Using addition instead of multiplication
  • Forgetting to update Celsius in setter
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