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。默认值为调用的行号。
precondition
与assert
类似,当第一个参数为true
时,程序继续运行,为false
时,会触发先决条件,程序终止。可以调用
preconditionFailure(_:file:line:)
方法来表明出现了一个错误,例如,switch
进入了 default
分支,但是所有的有效值应该被任意一个其他分支(非 default
分支)处理。preconditionFailure(_:file:line:)
函数参数同precondition(_:_:file:line:)
的第二、三、四参数。
注意:如果使用
unchecked
模式(-Ounchecked
)编译代码,先决条件将不会进行检查。编译器会假设所有的先决条件总是为 true
(真),来优化你的代码。而使用fatalError(_:file:line:)
函数时,不管怎样调整优化设定,都一定会中断程序的继续执行。
- 作者:黄x黄
- 链接:https://hxhowl.site/article/swift004
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章