官术网_书友最值得收藏!

Error handling

Swift provides support to throw, catch, propagate, and manipulate recoverable errors at runtime.

Value types should conform to the Error protocol to be represented as errors. The following example presents some 4xx and 5xx HTTP errors as enum:

enum HttpError: Error { 
case badRequest
case unauthorized
case forbidden
case requestTimeOut
case unsupportedMediaType
case internalServerError
case notImplemented
case badGateway
case serviceUnavailable
}

We will be able to throw errors using the throw keyword and mark functions that can throw errors with the throws keyword.

We can use a do-catch statement to handle errors by running a block of code. The following example presents JSON parsing error handling in a do-catch statement:

protocol HttpProtocol{ 
func didRecieveResults(results: Any)
}

struct WebServiceManager {
var delegate:HttpProtocol?
let data: Data
func test() {
do {
let jsonResult = try JSONSerialization.jsonObject(with:
self.data, options: JSONSerialization.ReadingOptions
.mutableContainers)
self.delegate?.didRecieveResults(results: jsonResult)
} catch let error {
print("json error" + error.localizedDescription)
}
}
}

We can use a defer statement to execute a set of statements just before code execution leaves the current code block, regardless of how the execution leaves the current block of code.

主站蜘蛛池模板: 庐江县| 罗源县| 绩溪县| 房山区| 莱西市| 嘉禾县| 天峻县| 崇礼县| 怀集县| 甘德县| 南投县| 上杭县| 洞口县| 崇礼县| 新沂市| 公安县| 盘锦市| 隆昌县| 潼关县| 稻城县| 义马市| 康平县| 平乡县| 霍城县| 托里县| 泗洪县| 元朗区| 祁东县| 车致| 沐川县| 元朗区| 沙河市| 建平县| 上虞市| 当雄县| 隆化县| 夏邑县| 安阳市| 江都市| 洞口县| 阳原县|