在我的应用中,我使用的自定义错误类型.Messiness
包含三个错误值.Procrastination
,.Arrogance
和NSError
(这些只是示例)。稍后在代码中我需要将错误转换为NSError
。 code
个对象在我声明的顺序或错误值之后从0开始具有enum ProgrammerError: ErrorType {
case Messiness
case Procrastination
case Arrogance
}
(ProgrammerError.Messiness as NSError).code // 0
(ProgrammerError.Procrastination as NSError).code // 1
(ProgrammerError.Arrogance as NSError).code // 2
属性:0,1,2等。
Messiness
我的问题是:有没有办法为枚举值设置不同的错误代码?例如,我可以将code
设置为import sqlite3 as lite
sqlite3.sqlite_version
# '3.6.21'
con = lite.connect('path\file.sqlite')
cur = con.cursor()
cur.execute('SELECT * from mytable')
# sqlite3.DatabaseError: file is encrypted or is not a database
值为100而不是0吗?
答案 0 :(得分:2)
您可以实施var _code: Int { get }
属性。
enum ProgrammerError: ErrorType {
case Messiness
case Procrastination
case Arrogance
var _code: Int {
switch self {
case .Messiness:
return 100
case .Procrastination:
return 101
case .Arrogance:
return 102
}
}
}
(ProgrammerError.Messiness as NSError).code // 100
(ProgrammerError.Procrastination as NSError).code // 101
(ProgrammerError.Arrogance as NSError).code // 102
如果需要,您还可以实施var _domain: String { get }
。
但我必须警告你,这些方法没有记录,所以他们将来可能会停止工作。
答案 1 :(得分:1)
或者,您可以尝试显式转换。
extension FileActionError {
func getCode() -> Int {
switch self {
case .BadFileNodeIndex: return 1
case .BadFileNodePath: return 2
}
}
func toNSError() -> NSError {
return NSError(domain: "", code: getCode(), userInfo: [NSLocalizedDescriptionKey: "\(self)"])
}
}
可能不是你所期望的。