Use a Swift switch to route one command into a scalar result.

Dispatcher Branch Panel

mode
dispatcher_branch_panel.swift
Replay: real traced execution (multi-file project)
let mode = "status"
let access = "ok"
let message: String

switch mode {
case "status":
    message = "handled:status"
case "refresh":
    message = "handled:refresh"
case "delete":
    message = access == "ok" ? "handled:delete" : "blocked"
default:
    message = "unknown"
}

print("mode=\(mode)")
print("access=\(access)")
print(message)
let mode = "refresh"
let access = "ok"
let message: String

switch mode {
case "status":
    message = "handled:status"
case "refresh":
    message = "handled:refresh"
case "delete":
    message = access == "ok" ? "handled:delete" : "blocked"
default:
    message = "unknown"
}

print("mode=\(mode)")
print("access=\(access)")
print(message)
let mode = "delete"
let access = "ok"
let message: String

switch mode {
case "status":
    message = "handled:status"
case "refresh":
    message = "handled:refresh"
case "delete":
    message = access == "ok" ? "handled:delete" : "blocked"
default:
    message = "unknown"
}

print("mode=\(mode)")
print("access=\(access)")
print(message)
  1. mode ← status, access ← ok

    1let mode→ status = "status"  //@mode="refresh", "delete"2let access→ ok = "ok"3let message: String
  2. switch mode

    5switch modestatus {6case "status":7    message = "handled:status"
  3. message ← handled:status

    5switch mode {6case "status":7    message→ handled:status = "handled:status"8case "refresh":
  4. print("mode=\(mode)")

    16print("mode=\(modestatus)")17print("access=\(accessok)")18print(messagehandled:status)
    outputmode=status
    access=ok
    handled:status
  1. mode ← refresh, access ← ok

    1let mode→ refresh = "refresh"2let access→ ok = "ok"3let message: String
  2. switch mode

    5switch moderefresh {6case "status":7    message = "handled:status"
  3. message ← handled:refresh

    7    message = "handled:status"8case "refresh":9    message→ handled:refresh = "handled:refresh"10case "delete":
  4. print("mode=\(mode)")

    16print("mode=\(moderefresh)")17print("access=\(accessok)")18print(messagehandled:refresh)
    outputmode=refresh
    access=ok
    handled:refresh
  1. mode ← delete, access ← ok

    1let mode→ delete = "delete"2let access→ ok = "ok"3let message: String
  2. switch mode

    5switch modedelete {6case "status":7    message = "handled:status"
  3. message ← handled:delete

    9    message = "handled:refresh"10case "delete":11    message→ handled:delete = accessok == "ok" ? "handled:delete" : "blocked"12default:
  4. print("mode=\(mode)")

    16print("mode=\(modedelete)")17print("access=\(accessok)")18print(messagehandled:delete)
    outputmode=delete
    access=ok
    handled:delete
dispatcher A dispatcher turns a command value into one branch of work without needing a dynamic function table.