swift - 将 CustomError 转换为 ErrorType 转换为 NSError 会丢失 userInfo

标签 swift swift2 xcode7 foundation

尝试将 CustomError 转换为兼容类型(ErrorType、NSError)会导致用户信息字典丢失:

class CustomError: NSError {}

let error = CustomError(domain: "com.customerrorexample", code: 500, userInfo: [NSLocalizedDescriptionKey: "A great description"])

然后

((error as ErrorType) as NSError).localizedDescription // "The operation couldn't be completed..."

但是这将打印正确的描述:

((error as ErrorType) as! CustomError).localizedDescription // "A great description"

为什么 ((CustomError as ErrorType) as NSError) 丢失了 userInfo 字典?知道我的实际代码将采用 ErrorType 作为输入,并打印其 localizedDescription - 无论 NSError 子类是什么,它都应该是准确的,我该如何解决它?

编辑

在这里查看我自己的答案:https://stackoverflow.com/a/34033365/646960 .仍然不是最佳解决方案,请随时提出更好的解决方案。

最佳答案

似乎阻止将 ErrorType 转换为 NSError 的编译器魔术效果很好:

((error as Any) as! NSError).localizedDescription // "A great description"

关于swift - 将 CustomError 转换为 ErrorType 转换为 NSError 会丢失 userInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32572033/

相关文章:

swift - 如何使 map 图钉动画掉落? swift 2.2 iOS 9

swift - 我们可以在不强制转换的情况下快速测试符合相同协议(protocol)的对象是否相同吗?

swift 错误?当具有泛型类型的子类时调用父类(super class)方法

ios - Xcode 没有这样的模块

Swift Playground - 实例成员不能在类型自定义类上使用

swift - xcode7 上出现错误。 view.layer.renderInContext(上下文!)

swift - Swift 代码有没有办法检测它是否在 Playground 上运行?

swift - 为什么添加 'dynamic' 可以解决我的错误访问问题?

swift - 如何将事件从 UIView 公开到 UIViewController

ios - 使用 URLRequestConvertible 在单元测试中链接错误