ios - 如何检查错误是否是 NSError 的子类

标签 ios swift cocoa

我想要一个函数,对于任何给定的错误,都会给我一些描述

protocol CustomError { }

func customDescription(_ error: Error) -> String {
    switch error {
    case let customError as CustomError:
        return "custom error"
    case ???:
        return "not subclass of NSError"
    case let nsError as NSError:
        return "subclass of NSError"
    }
}

上面不是真正的代码,我不想要一个String描述,而是一个Dictionary,但这在问题的上下文中并不重要。

问题是我不知道如何区分 ErrorNSError 的子类,而不是因为任何 swift 错误都可以桥接到 NSError。 swift 有可能吗?

最佳答案

正如您已经注意到的,任何符合 Error 的类型都可以被桥接 到 NSError,因此 error is NSError 始终为真,并且强制转换 错误作为 NSError 总是成功。

你可以做的是使用 type(of:) 检查值的动态类型:

type(of: error) is NSError.Type

如果 errorNSError 或其子类的实例,则计算结果为 true

关于ios - 如何检查错误是否是 NSError 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44694549/

相关文章:

ios - 嵌入式二进制文件和链接框架之间有什么区别

ios - 在 Xcode 中, Storyboard上的所有对象现在都是不可见的,但在更新帧后仍然可以看到帧和约束

ios - 如何在应用程序和它的扩展之间共享一个类?

ios - Swift tableview 在编辑一个单元格时更改随机单元格的值

macos - 确保窗口在 OS X Cocoa 上显示在屏幕上

ios - 如何在 iOS 上的 Metal 中使用 OpenCV 函数?

ios - 上下文闭包类型 Response<AnyObject> -> void 需要 1 个 agrument 但 3 个在闭包体中

macos - 在 Cocoa 中调试蜂鸣声

objective-c - 调用方法后数组为空

iphone - C/生成一个 1 到 4 之间的随机数,用 arc4random( ) 去掉 3?