Swift中的错误处理…
Swift错误处理就是关于优雅地处理失败情况的一切。 良好的错误处理可增强最终用户和开发人员的体验。 这对于轻松识别错误/问题及其原因非常有用。 此外,如果最终用户在使用您的应用程序时发生任何系统故障,它还可以让最终用户以适当的方式了解有关故障/问题的信息。
可恢复与不可恢复的错误:
可恢复的错误是可能会暂时停止正常程序执行的错误,但是程序应该能够正常恢复并继续执行而不会丢失任何重要功能。 不可恢复的错误是程序无法从中恢复并且必须关闭的错误。 这些可能是由于程序逻辑中的错误或其他意外情况(例如资源不可用)导致的,否则,程序将无法以有意义的方式执行。
运行时可能会发生错误,并且可能会更改程序的流程。 我们在软件开发中遇到各种错误。 例如:
- 逻辑错误
- 类型转换错误
- 外部错误,例如FileNotFound等。
我们项目中的错误处理越具体,维护起来就越容易诊断问题。
“ Swift为投掷,捕捉,传播和操纵提供一流的支持
运行时可恢复的错误。”
– Swift编程语言(Swift 3)
在过去,对不起,在古代,开发人员通常通过编写嵌套的if-else语句来处理错误,以捕获错误并加以处理。 这种方法导致带有很多嵌套条件的胖代码文件,而且,不仅如此,在使用那些可能导致错误的函数时,它并不表示会导致错误,除非我们记得或以类似的方式命名该函数。例如:
func retrievingFileFromServerCanThrowAnError(fileName:String){}
快速错误协议:
错误协议只是一种表示可以抛出的错误值的类型。 在Swift中,所有可能引发错误的对象,类,结构,枚举都必须通过错误协议进行确认。 如果不是,编译器将无法理解,因此会引发警告和错误。
因此,我们可以使用任何类型的错误来表示错误,这些错误可以向错误协议确认。 通常,我们通过与Error协议进行确认来使用枚举 。
扔…? 扔……?
与其他许多现代编程语言一样,在Swift中,我们使用“ throws ”标记可能引发错误的函数。 这样,无论在何处调用该函数,编译器/ SDK都会告诉我们该函数可能导致错误,因此也要处理这些异常。 这样,我们可以增强可用性和项目可维护性。 “ throw ”仅用于在函数内部引发错误,该错误可能引发错误。 我们可以将此“ throw”与“ return”进行比较,因为当您抛出函数时,函数将返回。 我们在参数的末尾放置“ throws”关键字,以将该功能标记为可抛出。
例如:
func selfDriving(车辆:Vehivle)引发
func GiveSpecificationsOf((车辆车辆:车辆)引发->规格
我们可以处理这类功能,这些功能可能会在许多方面导致错误。 在下面我们将看到它们,我们可以迅速执行此操作,以避免嵌套条件,函数中的代码code肿。
处理错误的3种方式:
- 赶上
每个抛出的函数都需要在“ try”语句中进行设置,因为它有潜在的错误。 在do块中,我们通过在函数前面写“ try”来标记可能引发错误的函数。 在catch块内,将捕获错误,其默认名称为“ error”,除非您给它改一个不同的名称。 我们可以编写多个catch块来处理特定的错误。
2. 尝试吗?
这样,我们就不需要使用do-catch块。 我们在可能引发错误的函数之前使用“ try?” 。 如果throwable函数返回或引发错误,则结果为“ nil”。否则结果是可选的,包含函数返回的值。
3. 尝试!
同样,我们也不需要do-catch块。 就像上面的“尝试?”一样,我们使用“ 尝试! 会引发错误的函数之前。 如果该函数执行时没有引发任何错误,则结果将是实际的返回值。 如果该函数引发错误,则应用程序将崩溃,因为它会产生nil值,并通过强制展开它而导致崩溃。
- 延迟关键字:
我们使用“ defer ”关键字来区分函数中某些代码的执行,直到函数返回或抛出。 函数返回/抛出后,无论“ defer”块中的代码是什么,都将执行。
鸣谢:本教程中上面的所有示例图像都是Apple迅速的Programming Language IBook的屏幕截图。 在下面的内容中,我提到了一些其他有用的资源,这些资源可以帮助您快速了解错误处理。
外部链接:
- 第1条
- 第二条
- 第三条