Practical Swift Programs
Report Totals
A report can add line items, apply a rate, and print a final total.
Calculate report totals
report_totals.swift
Replay: real traced execution (multi-file project)
let taxPercent = 8
let pricesInCents = [1200, 800, 500]
let subtotal = pricesInCents.reduce(0, +)
let tax = subtotal * taxPercent / 100
let total = subtotal + tax
let message = "total_cents=\(total)"
print(message)
let taxPercent = 0
let pricesInCents = [1200, 800, 500]
let subtotal = pricesInCents.reduce(0, +)
let tax = subtotal * taxPercent / 100
let total = subtotal + tax
let message = "total_cents=\(total)"
print(message)
let taxPercent = 10
let pricesInCents = [1200, 800, 500]
let subtotal = pricesInCents.reduce(0, +)
let tax = subtotal * taxPercent / 100
let total = subtotal + tax
let message = "total_cents=\(total)"
print(message)
taxPercent ← 8, pricesInCents ← [1200, 800, 500], subtotal ← 2500
1let taxPercent→ 8 = 8 //@taxPercent=0, 102let pricesInCents→ [1200, 800, 500] = [1200, 800, 500]3let subtotal→ 2500 = pricesInCents[1200, 800, 500].reduce(0, +)4let tax→ 200 = subtotal2500 * taxPercent8 / 1005let total→ 2700 = subtotal2500 + tax2006let message→ total_cents=2700 = "total_cents=\(total2700)"78print(messagetotal_cents=2700)outputtotal_cents=2700
taxPercent ← 0, pricesInCents ← [1200, 800, 500], subtotal ← 2500
1let taxPercent→ 0 = 02let pricesInCents→ [1200, 800, 500] = [1200, 800, 500]3let subtotal→ 2500 = pricesInCents[1200, 800, 500].reduce(0, +)4let tax→ 0 = subtotal2500 * taxPercent0 / 1005let total→ 2500 = subtotal2500 + tax06let message→ total_cents=2500 = "total_cents=\(total2500)"78print(messagetotal_cents=2500)outputtotal_cents=2500
taxPercent ← 10, pricesInCents ← [1200, 800, 500], subtotal ← 2500
1let taxPercent→ 10 = 102let pricesInCents→ [1200, 800, 500] = [1200, 800, 500]3let subtotal→ 2500 = pricesInCents[1200, 800, 500].reduce(0, +)4let tax→ 250 = subtotal2500 * taxPercent10 / 1005let total→ 2750 = subtotal2500 + tax2506let message→ total_cents=2750 = "total_cents=\(total2750)"78print(messagetotal_cents=2750)outputtotal_cents=2750
report total
Business reports often reduce a list of numbers into a subtotal, then apply a small final adjustment.