38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
title: Error Handling
 | 
						|
---
 | 
						|
 | 
						|
# Error Handling
 | 
						|
 | 
						|
You represent errors using any type that adopts the  `Error`  protocol.
 | 
						|
 | 
						|
```Swift
 | 
						|
enum PrinterError: Error {
 | 
						|
	case outOfPaper
 | 
						|
	case noToner
 | 
						|
	case onFire
 | 
						|
}
 | 
						|
```
 | 
						|
Use  `throw`  to throw an error and  `throws`  to mark a function that can throw an error. If you throw an error in a function, the function returns immediately and the code that called the function handles the error.
 | 
						|
 | 
						|
```swift
 | 
						|
func send(job: Int, toPrinter printerName: String) throws -> String {
 | 
						|
	if printerName == "Never Has Toner" {
 | 
						|
		throw PrinterError.noToner
 | 
						|
	}
 | 
						|
	return "Job sent"
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
There are several ways to handle errors. One way is to use  `do`-`catch`. Inside the  `do`block, you mark code that can throw an error by writing  `try`  in front of it. Inside the  `catch`  block, the error is automatically given the name  `error`  unless you give it a different name.
 | 
						|
 | 
						|
```swift
 | 
						|
do {
 | 
						|
	let printerResponse = try send(job: 1040, toPrinter: "Bi Sheng")
 | 
						|
	print(printerResponse)
 | 
						|
} catch {
 | 
						|
	print(error)
 | 
						|
}
 | 
						|
// Prints "Job sent"
 | 
						|
```
 |