Swift如何创建Error对象

在Objc中,经常使用的NSError是一个类,使用其自带的类方法可以很方便地构造出一个NSError对象来。
即便是在Swift中使用NSError,也可以使用初始化方法,快速得到一个代表错误的对象。

NSError(domain: "", code: 0, userInfo: nil)

然而在Swift中,去掉NS以后的Error不再是一个类,它是个协议。

Swift如何创建Error对象_第1张图片
Error定义.png

那好,既然想要一个Error对象,而系统又没有现成可直接使用的类来创建错误对象,那就自己定义一个:

自定义一个Error.png

然后会发现其自带一个属性:localizedDescription,这个属性是对于一个Error来说最重要的属性之一,现在取出来看看是怎样的:

Swift如何创建Error对象_第2张图片
localizedDescription.png
DESC

它有一个默认值:"操作未完成"。既然是自定义的Error,我们希望localizedDescription的值可以根据不同情况改变,当尝试进行error.localizedDescription = "xxx"这样的赋值操作时,会发现不允许,它是一个只读属性。

那就尝试一下在自定义的Error中"重写"这个属性吧,并让构造方法接受传参:

Swift如何创建Error对象_第3张图片

这里成功地把localizedDescription改掉了,但是在以前用这个方法是改不了的[懵]~
如果上一步没有把localizedDescription改掉,那么可以尝试去实现Error协议的子协议LocalizedError

Swift如何创建Error对象_第4张图片
LocalizedError.png

LocalizedError协议定义了4个属性,其中的errorDescription对应的就是localizedDescription的取值,比如可以这样写:

Swift如何创建Error对象_第5张图片
errorDescription.png

总结一下

  1. Error是个协议,要用它,得自己写个类遵循协议。
  2. localizedDescription属性可以在类里实现以达到赋值的目的。
  3. 如果实现localizedDescription属性,发现实际在取值时,并没有正确取到值,那么可以让自己的类去实现LocalizedError协议,并实现errorDescription属性。

你可能感兴趣的:(Swift如何创建Error对象)