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

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.

主站蜘蛛池模板: 福清市| 七台河市| 城市| 通渭县| 霞浦县| 永顺县| 清水河县| 车致| 康保县| 铜山县| 阿城市| 青河县| 临颍县| 新民市| 双峰县| 屏东市| 修文县| 蛟河市| 芦山县| 桐柏县| 安平县| 海淀区| 旬邑县| 东港市| 章丘市| 灵武市| 衡水市| 临江市| 额尔古纳市| 亚东县| 禄丰县| 博湖县| 甘德县| 攀枝花市| 清河县| 沛县| 嘉峪关市| 江山市| 安仁县| 桃源县| 都昌县|