在捕获异常之前,应该先了解一下抛出错误,我们来跟着示例一起学习一下:
动手写 8.3.1 ThrowError
控制台输出如下:
控制台输出如下:
这是Swift运行时抛出的错误。还需要读者注意的是,Fatal error在正式发布的应用中抛出,就会直接终止应用程序,所以遇到数组访问越界这类问题时,还是需要我们自己做一些安全的处理:
这是Swift运行时抛出的错误。还需要读者注意的是,Fatal error在正式发布的应用中抛出,就会直接终止应用程序,所以遇到数组访问越界这类问题时,还是需要我们自己做一些安全的处理:
控制台输出如下:(www.xing528.com)
控制台输出如下:
本例中声明了一个函数safeGetElement,在传入索引参数超过数组的大小时,返回一个nil。这看起来比之前的直接访问安全一些,但返回nil依然有问题。很多时候开发者并不会意识到自己拿到了一个nil,他们会直接传递这个nil做很多事情,所以抛出一个错误就显得很有必要。代码示例如下:
本例中声明了一个函数safeGetElement,在传入索引参数超过数组的大小时,返回一个nil。这看起来比之前的直接访问安全一些,但返回nil依然有问题。很多时候开发者并不会意识到自己拿到了一个nil,他们会直接传递这个nil做很多事情,所以抛出一个错误就显得很有必要。代码示例如下:
新增一个枚举类型ArrayError的声明(读者要注意,凡是可以被抛出的错误必须满足Error协议,否则不能用于抛出),接着声明一个case为IndexOutOfRange,可以传入array和index两个参数,一个是数组类型,一个是整数类型。在safeGetElement函数中,如果at参数超过数组大小,则抛出ArrayError错误,并将当时的数组、索引传入错误中。最后调用safeGetElement,在调用之前要加try关键字。因为safeGetElement函数已经被声明为throws,即有可能会抛出错误。运行Playground,控制台什么也没有输出,原因是错误没有被捕获,程序已经被系统终止,代码没有接着运行到print这行代码。下一小节将会讲解如何捕获错误。
新增一个枚举类型ArrayError的声明(读者要注意,凡是可以被抛出的错误必须满足Error协议,否则不能用于抛出),接着声明一个case为IndexOutOfRange,可以传入array和index两个参数,一个是数组类型,一个是整数类型。在safeGetElement函数中,如果at参数超过数组大小,则抛出ArrayError错误,并将当时的数组、索引传入错误中。最后调用safeGetElement,在调用之前要加try关键字。因为safeGetElement函数已经被声明为throws,即有可能会抛出错误。运行Playground,控制台什么也没有输出,原因是错误没有被捕获,程序已经被系统终止,代码没有接着运行到print这行代码。下一小节将会讲解如何捕获错误。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。