iOS Swift No.1 基础部分 - 错误处理

第一章 基础部分

13. Error Handling (错误管理)

error handling用来对执行代码时遇到错误时进行的响应和处理,与optional不同的是可选类型它是使用是否存在值的情况,来传达与沟通函数的成与败。错误管理允许你来判断决定这个error的潜在原因,在可能的情况下error handling 会把这个错误信息到代码的位置做进一步处理。

func canThrownError() throws {
	// this function may or may not throw an error 
}

throws关键字在这个函数的声明里面,这个函数指示它可以通过在其声明中包含 throws 关键字来引发抛出这个错误。当你调用这个可以抛出错误的函数时,可以用try关键字把错误抛出到表达式里面来。swift 会自动将错误传递到当前范围外,直到它们被 catch 的子句拿去处理错误。

do {
	try canThrowAnError()
	// no error was thrown
} catch {
	// an error was thrown
}

do语句创建了一个新的容器范围把错误信息放在一个可控的范围内,它允许将错误传递到一个或多个catch子句里面去。

// 定义的函数makeASandwich将会throw一个error
func makeASandwich() throws{
}
// do语句包含try的表达式
do {
	// try表达式调用makeASandwich函数
	try makeASandwich()
	eatASandwich()
} catch SandwichError.outOfCleanDishes {
	washDishes() 
// error会由两个catch从句进行处理 
} catch SandwichError.missingIngredients(let ingredients){
	buyGroceries(ingredients)
}

在上面的例子里这个定义的函数 makeASandwich() 将会throw一个error,我们将该函数的调用包装在try表达式中。 通过do语句中包装并调用函数,抛出的所有错误将被传送到catch语句进行处理。表达式有两种情况,一个是makeASandwich一个是eatASandwich,在makeASandwich的时候会出现的error时将会被抛给catch子句进行处理。在这个例子里面会抛出两个被catch子句进行处理的error,一个是在没有干净盘子outOfCleanDishes和缺少材料时missingIngredients如果没有error出现那么会执行eatASandwich()。

14. Assertions and Preconditions (断言与先决条件)

What & Why
其实断言和先决条件都是在代码运行的时候对代码质量的一种检测。在代码被执行前要用断言和先决条件来确保基本条件是否满足。布尔值在断言和先决条件中的值是true继续执行其他代码,反之程序则停止执行。先觉条件和断言来用来表达你在编码时所做的假设或期望。断言可以用来找出和更正所做的假设。而先决条件用来检查产品测试时出现的问题。

断言和先决条件之间的区别在于被执行的时间点有所不同:断言仅在调试版本中执行,但在调试和发布版本中先决条件都会被执行。 在发布版本中,断言内的条件不再被执行。 这意味着你可以在开发过程中使用尽可能多地使用断言,因为这并不会影响发布版本的性能。

14.1 Debugging with assertion (用断言进行调试)

// 先让年龄等于-3岁
let age = -3
assert(age >= 0,"A person's age can't be less than zero")
/* 断言会失败并且会伴随这个断言信息(a person's ... zero)
	可以省略断言信息*/

这个时候会出现断言失败是因为assert(age >=0)的布尔值是false我们给age的值是-3啊。所以调试时断言失败程序被中断停止运行了。

用assertionFailure()来标注断言失败 当有多个条语句时

if age > 10 {
	print("You can ride roller-coaster.")
	}else if age >= 0 {
	print("You can ride the ferris wheel")
}else {
	assertionFailure("A person's age can't be less than zero")
}

14.2 Enforcing preconditions (执行先决条件)

如果条件有失败的可能但你必须要让这个程序继续运行下去,那么你就要用到先觉条件了。可以调用precondition()方法来表明错误的地方。

precondition(index > 0, "Index must be greater than zero")

你可能感兴趣的:(iOS,开发,-,Swift语言基础)