Swift Error Handling Patterns: Try, Catch, and More