Swift offers first class support for catching, propagating, and manipulating recoverable errors at runtime. By recoverable, we mean errors that can be foreseen and handled suitably.
What Swift's Error handling approach offers us is a dedicated branching mechanism and a syntax to support it. It's a kind of specialized if-else mechanism, but one that, crucially, forces a calling function to deal with an error that may occur, by declaring itself as a throwing function, using the throws keyword.
Error handling thus becomes a graceful and uncomplicated way of dealing with functions that can fail.