Grouping throwing expressions using tuples
Basics article available: Error HandlingTuples can not only be super useful in order to group multiple related local variables into one, but can also be a great way to combine several throwing expressions.
// Here we have three highly related expressions that are
// all throwing, requiring separate assignments and separate
// 'try' keywords:
let contentFolder = try Folder.current.subfolder(named: "content")
let templatesFolder = try Folder.current.subfolder(named: "templates")
let output = try Folder.current.createSubfolderIfNeeded(withName: "output")
// By combining them all into a tuple, we only need one
// 'try', and can easily group our data into a single,
// lightweight container:
let folders = try (
content: Folder.current.subfolder(named: "content"),
templates: Folder.current.subfolder(named: "templates"),
output: Folder.current.createSubfolderIfNeeded(withName: "output")
)
// The call sites also become really nice and clean, with
// increased "namespacing" for our local variables:
readFiles(in: folders.content)
loadTemplates(from: folders.templates)