有没有办法在Swift中为ErrorType值指定错误代码?

时间:2015-09-03 22:38:51

标签: ios swift

在我的应用中,我使用的自定义错误类型.Messiness包含三个错误值.Procrastination.ArroganceNSError(这些只是示例)。稍后在代码中我需要将错误转换为NSErrorcode个对象在我声明的顺序或错误值之后从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吗?

2 个答案:

答案 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)"])
    }
}

可能不是你所期望的。