Matua Doc

Swift scope: variables inside blocks

Goal

Understand how scope controls where variables and constants can be used. Focus on values declared inside if, else, and func blocks. Learn how to avoid "cannot find in scope" errors.

if true {
    let message = "Inside"
    print(message)
}

// print(message)  // Error: message is out of scope

What is scope?

Scope is the region of code where a name is visible. Variables and constants exist only inside the block they are declared in. When the block ends, those names are no longer accessible.

func showTitle() {
    let title = "Room calculator"
    print(title)
}

// print(title)  // Error: title is out of scope

Why developers care about scope

Scope prevents accidental changes to values that should be private. It keeps code organized so each block controls its own data. It reduces bugs by limiting where variables can be used.

func calculate() {
    let roomLength = 6.0
    let roomWidth = 4.5
    let area = roomLength * roomWidth
    print(area)
}

Scope in an if block

A value declared inside an if block exists only inside that block. You can use it inside the braces but not after the block ends.

let hasFurniture = true

if hasFurniture {
    let furnitureCount = 3
    print(furnitureCount)
}

// print(furnitureCount)  // Error

Scope in else blocks

Each branch has its own scope. Values declared in if are not visible in else and vice versa.

let isLarge = false

if isLarge {
    let label = "Large room"
    print(label)
} else {
    let label = "Small room"
    print(label)
}

// print(label)  // Error

Scope in functions

All variables declared inside a function are local to that function. They cannot be used by code outside the function. This makes functions independent and reusable.

func roomVolume() {
    let length = 6.0
    let width = 4.5
    let height = 2.7
    let volume = length * width * height
    print(volume)
}

// print(volume)  // Error

Using values outside a block

Declare the variable before the block if you need it later. Then assign it inside the block. Make sure it always gets a value before you use it.

var message = ""

if true {
    message = "Inside"
}

print(message)

Common scope errors

Using a variable outside its block causes a "cannot find in scope" error. Declaring a new variable with the same name can hide the outer one. Forgetting to initialize a variable before use causes another error.

var result = 0

if true {
    let result = 10
    print(result)
}

print(result)  // This prints the outer value

How to test scope behavior

Move a variable inside or outside a block and observe the compiler error. Check which variables appear in code completion at each line. Use print statements to confirm which value is in scope.

if true {
    let x = 5
    print(x)
}

// print(x)  // Uncomment to see the error

Task A

Write an if block that declares a constant inside it. Attempt to print the constant outside the block to trigger a scope error. Explain why the error occurs.

if true {
    let note = "Inside"
    // print inside the block
}

// try to print note here

Task B

Declare a variable before an if block. Assign a value inside the block and print it afterward. Show that the value is accessible outside.

var status = ""

if true {
    // assign a value here
}

// print status here

Task C

Write a function that declares three local constants. Calculate a result and print it inside the function. Try to print the local result outside the function.

func showArea() {
    // declare three constants
    // calculate area and print it
}

// try to print the area here

Task D

Write an if / else block with a local constant in each branch. Print the constant inside each branch. Attempt to print it after the block to confirm scope rules.

let isLarge = false

if isLarge {
    // declare a label and print it
} else {
    // declare a label and print it
}

// try to print label here