【发布时间】:2015-12-10 21:09:36
【问题描述】:
尝试将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。仍然不是最佳解决方案,请随时提出更好的解决方案。
【问题讨论】:
-
当你似乎没有使用那个协议时,为什么标题提到 CustomNSError?
-
@MichaelTsai 我的意思是
CustomError,在我的代码中描述为只是一个扩展NSError的类。原来CustomNSError现在是一个 SDK 类,在我写这篇文章的时候(2015 年)还不是。很抱歉造成混乱 -
酷。感谢您的澄清。这应该可以防止现在搜索 CustomNSError 协议的人感到困惑。
标签: swift swift2 xcode7 foundation