在Objc中,经常使用的NSError
是一个类,使用其自带的类方法可以很方便地构造出一个NSError对象来。
即便是在Swift中使用NSError,也可以使用初始化方法,快速得到一个代表错误的对象。
NSError(domain: "", code: 0, userInfo: nil)
然而在Swift中,去掉NS
以后的Error
不再是一个类,它是个协议。
那好,既然想要一个Error对象,而系统又没有现成可直接使用的类来创建错误对象,那就自己定义一个:
然后会发现其自带一个属性:localizedDescription,这个属性是对于一个Error来说最重要的属性之一,现在取出来看看是怎样的:
它有一个默认值:"操作未完成"。既然是自定义的Error,我们希望localizedDescription的值可以根据不同情况改变,当尝试进行error.localizedDescription = "xxx"
这样的赋值操作时,会发现不允许,它是一个只读属性。
那就尝试一下在自定义的Error中"重写"这个属性吧,并让构造方法接受传参:
这里成功地把localizedDescription改掉了,但是在以前用这个方法是改不了的[懵]~
如果上一步没有把localizedDescription改掉,那么可以尝试去实现Error
协议的子协议LocalizedError
。
LocalizedError协议定义了4个属性,其中的errorDescription
对应的就是localizedDescription
的取值,比如可以这样写:
总结一下
- Error是个协议,要用它,得自己写个类遵循协议。
- localizedDescription属性可以在类里实现以达到赋值的目的。
- 如果实现localizedDescription属性,发现实际在取值时,并没有正确取到值,那么可以让自己的类去实现LocalizedError协议,并实现errorDescription属性。