type
status
date
slug
summary
tags
category
icon
password
example-row
example-row
断言和先决条件是在运行时所做的检查。如果断言或者先决条件中的布尔条件评估的结果为 true(真),则代码像往常一样继续执行。如果布尔条件评估结果为 false(假),程序的当前状态是无效的,则代码执行结束,应用程序中止。
断言仅在调试环境有效,而先决条件则在调试环境和生产环境中都有效。断言的目的是帮助你在开发阶段找到错误和不正确的假设,而先决条件的目的帮助你在生产环境中探测到存在的问题。在生产环境中,应该使用更优雅的错误处理机制来处理不满足先决条件的情况,而不是直接触发致命错误,比如使用错误类型(Error)、抛出函数(throwing functions)和 do-catch 语句。

使用断言进行调试

assert(_:_:file:line:):
  • 第一个参数为要测试的条件,是一个bool值。
  • 第二个参数为断言信息。
  • 第三个参数为要打印的文件名message。默认值是调用的文件。
  • 第四个参数为要打印的行号message。默认值为调用的行号。
当第一个参数为true时,程序继续运行,为false时,会触发断言,程序终止。如果不需要断言信息时,也可以不写第二个参数。
如果代码已经检查了条件,你可以使用 assertionFailure(_:file:line:) 函数来表明断言失败了。参数同assert(_:_:file:line:) 的第二、三、四参数。

先决条件

precondition(_:_:file:line:) :
  • 第一个参数为要测试的条件,是一个bool值。
  • 第二个参数为断言信息。
  • 第三个参数为要打印的文件名message。默认值是调用的文件。
  • 第四个参数为要打印的行号message。默认值为调用的行号。
preconditionassert类似,当第一个参数为true时,程序继续运行,为false时,会触发先决条件,程序终止。
可以调用preconditionFailure(_:file:line:) 方法来表明出现了一个错误,例如,switch 进入了 default 分支,但是所有的有效值应该被任意一个其他分支(非 default 分支)处理。preconditionFailure(_:file:line:)函数参数同precondition(_:_:file:line:) 的第二、三、四参数。 注意
如果使用 unchecked 模式(-Ounchecked)编译代码,先决条件将不会进行检查。编译器会假设所有的先决条件总是为 true(真),来优化你的代码。而使用fatalError(_:file:line:) 函数时,不管怎样调整优化设定,都一定会中断程序的继续执行。
 
【swift003】错误处理【swift005】字符串
  • Twikoo