参考资料与链接https://www.cnswift.org
错误处理
在程序执行阶段,你可以使用错误处理机制来为错误状况负责。
当一个函数遇到错误情况,他会抛出一个错误,这个函数的访问者会捕捉到这个错误,并作出合适的反应。
func canThrowAnError() throws{
}
//通过在函数声明过程当中加入 throws 关键字来表明这个函数会抛出一个错误。
//当你调用了一个可以抛出错误的函数时,需要在表达式前预置 try 关键字。
do {
try canThrowAnError()
// no error was thrown
} catch {
// an error was thrown
}
断言和先决条件
- 断言和先决条件用来检测运行时发生的事情。你可以使用它们来保证在执行后续代码前某必要条件是满足的。
- 如果布尔条件在断言或先决条件中计算为 true ,代码就正常继续执行。如果条件计算为 false ,那么程序当前的状态就是非法的;代码执行结束,然后你的 app 终止。
- 断言和先决条件并不用于可回复或者期望的错误。由于错误断言或先决条件显示非法的程序状态,所以没办法来抓取错误断言。
- 断言只在 debug 构建的时候检查,但先决条件则在 debug 和生产构建中生效。
使用断言进行调试
- 断言会在运行的时候检查一个逻辑条件是否为 true 。
- 如果条件判断为 true,代码运行会继续进行;如果条件判断为 false,代码运行结束,你的应用也就中止了。
let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
//如果代码已经检查了条件,你可以使用 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(age > 0 , "Index must be greater than zero.")
- 可以调用 preconditionFailure(_:file:line:) 函数来标明错误发生了——比如说,如果 switch 的默认情况被选中,但所有的合法输入数据应该被其他 switch 的情况处理。
- 如果你在不检查模式编译( -Ounchecked ),先决条件不会检查。编译器假定先决条件永远为真,并且它根据你的代码进行优化。总之, fatalError(_:file:line:) 函数一定会终止执行,无论你优化设定如何。
- 你可以在草拟和早期开发过程中使用 fatalError(_:file:line:) 函数标记那些还没实现的功能,通过使用 fatalError("Unimplemented") 来作为代替。由于致命错误永远不会被优化,不同于断言和先决条件,你可以确定执行遇到这些临时占位永远会停止。
网友评论