Swift 中的 Error 和 NSError 有什么区别?

What's the difference between Error and NSError in Swift?

我正在创建一个应该 return 错误的库,所以我想知道应该使用哪个库。

更新: 我应该澄清一下,returned 结果将来自异步调用,所以我需要在出现错误时通知用户,我想知道我应该使用哪种类型的 Error 或 NSError。

NSError 是一个 Cocoa class

An NSError object encapsulates information about an error condition in an extendable, object-oriented manner. It consists of a predefined error domain, a domain-specific error code, and a user info dictionary containing application-specific information.

Error 是一个 Swift 协议 ,classes、结构和枚举可以并且 NSError 确实符合。

A type representing an error value that can be thrown.

Any type that declares conformance to the Error protocol can be used to represent an error in Swift’s error handling system. Because the Error protocol has no requirements of its own, you can declare conformance on any custom type you create.

引用部分为文档中的字幕说明。

Swift的错误处理系统是使用try - catch捕获错误的模式。它要求被方法捕获的错误是thrown。这种模式比使用 NSError 个实例的传统错误处理更加通用。如果您计划实施try - catch,您实际上不需要Error协议。