A todo summary filters task records and prints the matching names.

Summarize visible tasks

showDone
todo_summary.swift
Replay: real traced execution (multi-file project)
let showDone = false
let tasks = [
    (name: "write", done: false),
    (name: "review", done: true),
    (name: "publish", done: false)
]
var visible: [String] = []

for task in tasks {
    if showDone || !task.done {
        visible.append(task.name)
    }
}

let summary = visible.joined(separator: ",")

print(summary)
let showDone = true
let tasks = [
    (name: "write", done: false),
    (name: "review", done: true),
    (name: "publish", done: false)
]
var visible: [String] = []

for task in tasks {
    if showDone || !task.done {
        visible.append(task.name)
    }
}

let summary = visible.joined(separator: ",")

print(summary)
  1. showDone ← false, tasks ← [(name: "write", done: false), (name: "review", done: true), (name: "publish", done: false)]

    1let showDone→ false = false  //@showDone=true2let tasks→ [(name: "write", done: false), (name: "review", done: true), (name: "publish", done: false)] = [3    (name: "write", done: false),4    (name: "review", done: true),5    (name: "publish", done: false)6]7var visible→ []: [String] = []
  2. for task in tasks

    pass 1 of 3
    9for task(name: "write", done: false) in tasks[(name: "write", done: false), (name: "review", done: true), (name: "publish", done: false)] {10    if showDone || !task.done {
    All 3 passes — pass 1 is the card above
    passtaskshowDonetask.donevisibletask.name
    1(name: "write", done: false)falsefalse[]write
    2(name: "review", done: true)
    3(name: "publish", done: false)falsefalse["write"]publish
  3. if showDone || !task.done

    pass 1 of 2
    9for task in tasks {10    if showDonefalse || !task.donefalse {11        visible[].append(task.namewrite)12    }
  4. if showDone || !task.done

    pass 2 of 2
    9for task in tasks {10    if showDonefalse || !task.donefalse {11        visible["write"].append(task.namepublish)12    }
  5. summary ← write,publish

    15let summary→ write,publish = visible["write", "publish"].joined(separator: ",")1617print(summarywrite,publish)
    outputwrite,publish
  1. showDone ← true, tasks ← [(name: "write", done: false), (name: "review", done: true), (name: "publish", done: false)]

    1let showDone→ true = true2let tasks→ [(name: "write", done: false), (name: "review", done: true), (name: "publish", done: false)] = [3    (name: "write", done: false),4    (name: "review", done: true),5    (name: "publish", done: false)6]7var visible→ []: [String] = []
  2. for task in tasks

    pass 1 of 3
    9for task(name: "write", done: false) in tasks[(name: "write", done: false), (name: "review", done: true), (name: "publish", done: false)] {10    if showDone || !task.done {
    All 3 passes — pass 1 is the card above
    passtask
    1(name: "write", done: false)
    2(name: "review", done: true)
    3(name: "publish", done: false)
  3. if showDone || !task.done

    pass 1 of 3
    9for task in tasks {10    if showDonetrue || !task.donefalse {11        visible[].append(task.namewrite)12    }
    All 3 passes — pass 1 is the card above
    passtask.donevisibletask.name
    1false[]write
    2true["write"]review
    3false["write", "review"]publish
  4. summary ← write,review,publish

    15let summary→ write,review,publish = visible["write", "review", "publish"].joined(separator: ",")1617print(summarywrite,review,publish)
    outputwrite,review,publish
task filter Filtering a small list is a common program shape: inspect each record, keep the ones that match, and print a compact summary.