一、(1.3) 错误处理 断言与先决条件

错误处理

  1. 使用错误处理响应程序在执行期间可能遇到的错误情况。
  2. 当函数遇到错误条件时,它会抛出错误。 然后该函数的调用者可以捕获错误并做出适当的响应
  3. 函数表明它可以通过在其声明中包含throws关键字来引发错误。 当您调用可以抛出错误的函数时,请将try关键字添加到表达式中。
  4. 自动将错误传播出当前作用域,直到它们被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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 你可以使用错误处理(error handling)来应对程序执行中可能遇到的错误条件。 相对于可选中运用值的存在与...
    伍哥___阅读 287评论 0 0
  • Swift语言开发指南 基础部分 Swift是一门新的开发语言,它可以在iOS、macOS watchOS以及tv...
    南风_001阅读 401评论 0 0
  • 1.表示和抛出错误 在Swift中,错误由符合Error协议的类型的值表示。这个空协议表示类型可以用于错误处理。S...
    WSJay阅读 2,180评论 0 2
  • 你可以扩展集合,使其具有安全的下标,当值不存在时返回nil: -- Chris Eidhof (@chriseid...
    影痕残碎阅读 292评论 0 1
  • 周五放学,妈妈带我去大港阿姨家了。总想着跟哥哥弟弟玩,写作业随然在计划时间内完成,但是不太认真,语文小卷和数学小卷...
    小王子WXN阅读 166评论 0 1

友情链接更多精彩内容