Practical Swift Programs
Todo Summary
A todo summary filters task records and prints the matching names.
Summarize visible tasks
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)
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] = []for task in tasks
pass 1 of 39for 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 pass taskshowDonetask.donevisibletask.name1 (name: "write", done: false) false false [] write 2 (name: "review", done: true) — — — — 3 (name: "publish", done: false) false false ["write"] publish if showDone || !task.done
pass 1 of 29for task in tasks {10 if showDonefalse || !task.donefalse {11 visible[].append(task.namewrite)12 }if showDone || !task.done
pass 2 of 29for task in tasks {10 if showDonefalse || !task.donefalse {11 visible["write"].append(task.namepublish)12 }summary ← write,publish
15let summary→ write,publish = visible["write", "publish"].joined(separator: ",")1617print(summarywrite,publish)outputwrite,publish
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] = []for task in tasks
pass 1 of 39for 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 pass task1 (name: "write", done: false) 2 (name: "review", done: true) 3 (name: "publish", done: false) if showDone || !task.done
pass 1 of 39for task in tasks {10 if showDonetrue || !task.donefalse {11 visible[].append(task.namewrite)12 }All 3 passes — pass 1 is the card above pass task.donevisibletask.name1 false [] write 2 true ["write"] review 3 false ["write", "review"] publish 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.