---
skill: Mobile
title: iOS Fundamentals
type: Concept guide
summary: Swift, the app lifecycle, and how SwiftUI decides what to draw.
owner: Developer D
updated_by: Developer D
updated: 2026-09-29
---

# iOS Fundamentals

## Swift in one page

- **Optionals** are the type system telling you a value may be absent. Unwrap
  deliberately; `!` is a promise you will be held to at runtime.
- **Structs are values, classes are references.** Prefer structs. Reach for a
  class when you need identity or shared mutable state.
- **Protocols** describe capability, not hierarchy.

## App lifecycle

An app is not simply "open" or "closed":

| State | What it means |
| --- | --- |
| Not running | Never launched, or terminated |
| Inactive | Foreground but not receiving events |
| Active | Foreground and interactive |
| Background | Running briefly with limited time |
| Suspended | In memory, not executing — can be killed silently |

Anything you have not saved before suspension can disappear.

## SwiftUI is declarative

You describe what the UI should look like for a given state; the framework works
out the changes. You do not mutate views.

```swift
struct LevelBadge: View {
    let level: Int

    var body: some View {
        Text("L\(level)")
            .font(.caption.weight(.semibold))
            .padding(.horizontal, 8)
            .padding(.vertical, 2)
            .background(Capsule().fill(.quaternary))
    }
}
```

## State ownership

- `@State` — this view owns it.
- `@Binding` — someone else owns it, this view may change it.
- `@Observable` / `@StateObject` — a model object with a longer life.

Hoist state to the lowest common ancestor that needs it, and no higher.
