CustomNSError 协议有什么作用,我为什么要采用它?

Nic*_*atz 8 swift

CustomNSError协议有什么作用,我为什么要采用它?
Apple 提供的文档仅说明:

描述专门提供域、代码和用户信息字典的错误类型。

我已经在谷歌上搜索过,但在那里找不到与我的问题相关的任何内容。

ape*_*rov 5

每个符合Error协议的类型都隐式地桥接到NSError. 从 Swift 2 开始就是这种情况,其中编译器 提供域(即类型的重整名称)和代码(基于 枚举类型的鉴别器)。

所以你需要CustomNSError,LocalizedErrorRecoverableError显式运行时映射到 NSError 。

更多信息在这里

例子:

// Errors

enum ServiceError: Int, Error, CustomNSError {
    case unknownError = -1000
    case serverReturnBadData

    //MARK: - CustomNSError

    static var errorDomain: String = "reverse.domain.service.error"

    var errorCode: Int { return self.rawValue }
    var errorUserInfo: [String : Any] { return [:]  } //TODO: Return something meaningful here
}

extension NSError {

    var serviceError: ServiceError? {
        return (self.domain == ServiceError.errorDomain
            ? ServiceError(rawValue: self.code)
            : nil)
    }

    convenience init(serviceError: ServiceError) {
        self.init(
            domain: ServiceError.errorDomain,
            code: serviceError.rawValue,
            userInfo: serviceError.errorUserInfo)
    }
}
Run Code Online (Sandbox Code Playgroud)