Swift5.1—断言和先决条件

简介: Swift5.1—断言和先决条件

断言和先决条件是在运行时所做的检查。你可以用他们来检查在执行后续代码之前是否一个必要的条件已经被满足了。如果断言或者先决条件中的布尔条件评估的结果为true(真),则代码像往常一样继续执行。如果布尔条件评估结果为false (假),程序的当前状态是无效的,则代码执行结束,应用程序终止。


断言帮助你在开发阶段找到错误和不正确的假设,先决条件帮助你在生产环境中探测到存在的问题。


断言和先决条件的不同点是,他们什么时候进行状态检测:断言仅在调试环境运行,而先决条件则在调试环境和生产环境中运行。在生产环境中,断言的条件将不会进行评估。这个意味着你可以使用很多断言在你的开发阶段,但是这些断言在生产环境中不会产生任何影响。


使用断言进行调试


你可以调用Swift标准库的assert(_:_:file:line:)函数来写一个断言。向这个函数传入一个结果为true或者false的表达式以及一条信息,当表达式的结果为false的时候这条信息会被显示。

let age = -3
//因为age<0,所以断言会触发
assert(age >=0,"A person's age cannot be less than zero")


如果不需要断言信息,可以就像这样忽略掉。

assert(age >= 0)


如果代码已经检查了条件,你可以使用assertionFailure(_:file:line:)函数来表明断言失败了。

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


强制执行先决条件


当一个条件可能为假,但是继续执行代码要求条件必须为真的时候,需要使用先决条件。例如使用先决条件来检查是否下标越界,或者来检查是否将一个正确的参数传给函数。

你可以使用全局precondition(_:_:file:line:)函数来写一个先决条件。向这个函数传入一个结果为true或者false的表达式以及一条信息,当表达式的结果为false的时候这条信息就会被显示。

//在下一个下标的实现里...
precondition(index > 0,"Index must be greater than zero.")


你可以调用preconditionFailure(_:file:line:)方法来表明出现了一个错误,例如,switch进入了default分支,但是所有的有效值应该被任意一个其他分支(非default分支)处理。


注:


如果你使用unchecked模式(-Ounchecked)编译代码,先决条件将不会进行检查。编译器假设所有的先决条件总是为true(真),他将优化你的代码。然而,fatalError(_:file:line:)函数总是中断执行,无论你怎么进行优化设定。


你能使用fatalError(_:file:line:)函数在设计原型和早期开发阶段,这个阶段只有方法的声明,但是没有具体实现,你可以在方法中写上fatalError("Unimplemented")作为具体实现。因为fatalError不会像断言和先决条件那样被优化掉,所以你可以确保当代码执行到一个没有被实现的方法时,程序会被中断。

目录
相关文章
|
7月前
|
Swift 开发者
在Swift中,错误处理
在Swift中,错误处理
58 6
|
Go Swift
39 如何在Swift里进行错误处理
在Swift里进行错误处理
68 0
|
JSON 编译器 API
逐步实现基于源码的 Swift 代码覆盖率
最近,正在为我司的项目研究基于 Swift 的代码覆盖率检测方案的解决方案,我已经努力尝试并且找到了最佳实践。
273 0
逐步实现基于源码的 Swift 代码覆盖率
|
Go Swift iOS开发
Swift5.1—错误处理
Swift5.1—错误处理
145 0
|
C++ iOS开发 Swift
swift4.1 系统学习十 函数
swift的函数与其他语言中的函数还是有很多的不同点的, 我们在本节中一起学习swift中的函数都有哪些特性。 辅助文件, 在“统一的函数引用体系”中会用到。
1047 0
|
算法
详解Swift的类型检查器
本文讲的是详解Swift的类型检查器,这篇文章将围绕曾不断使我重写代码的一些 Swift 编译器的报错信息展开:
1296 0
|
算法 图形学
迁移到 Swift 3,这些陷阱在等你
本文讲的是迁移到 Swift 3,这些陷阱在等你,万岁!Swift 3 发布了,让我们一起来移植项目吧!在这篇文章中,我会你分享我的项目迁移到 Swift 3的经历,那是一个 2 万行的 Swift 项目。如果你对此感到好奇
999 0