我已经阅读了Swift Evolution关于改进桥接的文章以及其他一些在线资源,但仍然有些缺失。
考虑到这个自定义的
一段Objective-C应用程序需要能够读取错误对象,并从中提取错误名称(networkOffline、httpError、unknown、systemError)和案例参数(httpError.status和systemError.errno)。
将上述内容转换为NSError的结果令人惊讶,我正在尝试理解如何改进。
首先,生成的错误代码。似乎具有参数的情况(无论其顺序如何)都会从零开始获得
给定应用程序报告的错误代码,现在更难确定实际的错误情况。
其次,我期望这样一个智能机制(特别是它是编译器生成的)也会将案例参数复制到userInfo字典中 - 但它并没有这样做。
我是做错了吗,还是必须完全实现CustomNSError协议才能获得有意义和一致的NSError对象?当然,这是一个选择,但我希望它能自动完成(有点像Codable如何完成其魔术)。
此外,应用程序能否将错误案例名称作为String获取?
供参考,以上片段在Xcode 10.3 Playground中执行。
考虑到这个自定义的
Error
枚举: public enum MyNetworkError: Error {
case networkOffline
case httpError(status: Int)
case unknown
case systemError(errno: Int)
}
一段Objective-C应用程序需要能够读取错误对象,并从中提取错误名称(networkOffline、httpError、unknown、systemError)和案例参数(httpError.status和systemError.errno)。
将上述内容转换为NSError的结果令人惊讶,我正在尝试理解如何改进。
let nse_A = MyNetworkError.networkOffline as NSError
let nse_B = MyNetworkError.httpError(status: 503) as NSError
let nse_C = MyNetworkError.unknown as NSError
let nse_D = MyNetworkError.systemError(42) as NSError
首先,生成的错误代码。似乎具有参数的情况(无论其顺序如何)都会从零开始获得
code
: print(nse_A.code) // 2 (expected: 0)
print(nse_B.code) // 0 (expected: 1)
print(nse_C.code) // 3 (expected: 2)
print(nse_D.code) // 1 (expected: 3)
给定应用程序报告的错误代码,现在更难确定实际的错误情况。
其次,我期望这样一个智能机制(特别是它是编译器生成的)也会将案例参数复制到userInfo字典中 - 但它并没有这样做。
我是做错了吗,还是必须完全实现CustomNSError协议才能获得有意义和一致的NSError对象?当然,这是一个选择,但我希望它能自动完成(有点像Codable如何完成其魔术)。
此外,应用程序能否将错误案例名称作为String获取?
供参考,以上片段在Xcode 10.3 Playground中执行。