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" | ||
|  | ``` |