Swift 3必看:Error与NSError的关系

在学习Swift 3的过程中整理了一些笔记,如果想看其他相关文章可前往《Swift 3必看》系列目录

在之前的版本中,Swift中Error与OC中NSError的关系就像上海的南京路与南京的上海路关系一样,那就是没有关系。
我们先来看两者的区别。
Error是一个实现ErrorProtocol枚举,对外能够获取的具体信息只有rawValue。

但是我们知道NSError是有UserInfo和domain的:

如果OC中的NSError桥接到Swift中,变成Error类型,那么获取NSError中的UserInfo信息也变成了一件头疼的事情,比如AVError:

很显然,解决方式就是提供一个方式可以让这两个类型可以无损的转换。

LocalizedError

增加了一个LocalizedError协议。这个协议增加了errorDescription属性。如果Error同时实现这个协议,相比原来只有rawValue就增加了更多的信息。

这个协议同时还有三个属性:failureReason、helpAnchor、recoverySuggestion。

在NSError中也有对应的三个属性:

CustomNSError

CustomNSError 用来桥接原来NSError中的code、domain、UserInfo。

如果想让我们的自定义Error可以转成NSError,实现CustomNSError就可以完整的as成NSError。

RecoverableError

这次还给Error增加了RecoverableError协议。用来提示用户可以通过什么样的方式来处理这个Error。

欢迎关注我的微博:@没故事的卓同学
相关链接:
SE-0112:Improved NSError Bridging

1 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部