一、(1.3) 错误处理 断言与先决条件
2019-12-30 本文已影响0人
爱玩游戏的iOS菜鸟
错误处理
- 使用错误处理来响应程序在执行期间可能遇到的错误情况。
- 当函数遇到错误条件时,它会抛出错误。 然后该函数的调用者可以捕获错误并做出适当的响应。
- 函数表明它可以通过在其声明中包含throws关键字来引发错误。 当您调用可以抛出错误的函数时,请将try关键字添加到表达式中。
- 自动将错误传播出当前作用域,直到它们被catch子句处理。
错误处理示例
如果没有抛出错误,则调用eatASandwich()函数。 如果抛出错误并且它与SandwichError.outOfCleanDishes大小写匹配,则将调用washDishes()函数。 如果抛出错误并且它与SandwichError.missingIngredients情况匹配,则调用buyGroceries(_ :)函数,并使用catch模式捕获的关联[String]值。
断言和先决条件
- 断言和先决条件是在运行时发生的检查。在执行任何进一步的代码之前,使用它们来确保满足基本条件。如果断言和先决条件中的布尔条件求值为true,则代码执行将照常继续。如果条件的计算结果为false,则程序的当前状态无效;代码执行结束,您的应用程序终止。
- 断言可帮助您在开发过程中发现错误和错误假设,并且先决条件可帮助您检测生产中的问题。
- 断言和先决条件也成为代码中有用的文档形式。与上面的错误处理中讨论的错误条件不同,断言和前置条件不用于可恢复或预期的错误。因为失败的断言或前置条件表明程序状态无效,所以无法捕获失败的断言
- 如果发生无效状态,使用它们来强制执行有效数据和状态会导致应用程序以更可预测的方式终止,并有助于使问题更易于调试。一旦检测到异常状态就停止执行也有助于限制由异常状态造成的损失
- 断言和先决条件之间的区别在于它们的检查时间:仅在调试版本中检查断言,但在调试和生成版本中都会检查先决条件。在生产版本中,不会评估断言中的条件。这意味着您可以在开发过程中使用任意数量的断言,而不会影响生产中的性能。
let age = 71
assert(age < 70, "你已经老啦")//Assertion failed: 你已经老啦
if age > 10 && age <= 16{
print("你可以骑自行车了")
}else if age > 16 && age <= 18{
print("你可以去网吧了")
}else if age > 16 && age <= 70{
print("你可以去开车了")
}else{
assertionFailure("你的年龄不能低于0")
}
只要条件可能为false,就使用前置条件,但对于代码继续执行必须确实为真。 例如,使用前置条件检查下标是否超出范围,或检查函数是否已传递有效值。
let age = 9
precondition(age < 70, "你已经老啦")
if age > 10 && age <= 16{
print("你可以骑自行车了")
}else if age > 16 && age <= 18{
print("你可以去网吧了")
}else if age > 16 && age <= 70{
print("你可以去开车了")
}else{
preconditionFailure("你的年龄不能低于10 什么也不能干")//Fatal error: 你的年龄不能低于10 什么也不能干
}
Swift学习日记1.3