你有没有遇到过这样的情况呢?学校大作业 5 人一组,4 人划水,直接变成个人项目;工作里安排 2 个人一起协作,同事却觉得他只用负责加油。这些自顾自划水的人真是令人头疼…那么有什么好的应对方法吗?不学不知道,Swift 语言中的各种异常处理机制提供了一整套应对方案,让我们来看看它有哪些妙计!
##初期应对方案
#####尽早记录分工安排,提前认出划水人——throws
throws
是 Swift 异常处理的重要关键词。它会出现在函数(包括成员函数、构造函数)的签名中,用来表示一个函数是否会抛出异常。换句话说,也就是这个函数会不会在其内部就处理完可能触发的异常。
// 可能抛出异常
func canThrowErrors() throws -> String
// 不会抛出异常
func cannotThrowErrors() -> String
带throws
的函数的学名叫 throwing function,如果我们把处理异常作为函数的工作,那么 throwing function 其实就是理直气壮的划水人——“我不干了,异常在这儿,你们帮我处理吧”。在 Swift 中,只有 throwing function 才可以抛出异常。有了 throws
这个关键词,相当于每个要划水的函数都要提前和编译器登记,不然就得自己做好异常处理的工作。
// Swift 通过实现遵从 Error 协议的枚举来实现自定义异常
enum SomeError: Error {
case missing // 常见划水行为,人间蒸发
case forgot // 常见划水行为,“我忘了”
}
func cannotThrowErrors() -> String {
// 普通函数抛出异常,编译器报错: