Как получить доступ к свойству Swift из пользовательских ошибок? - PullRequest
0 голосов
/ 04 ноября 2019

enter image description here

Код:

enum SHError: Error {

    case InvalidInputError(code: Int, message: String, info: [String:Any]? = [:])
    case InvalidProcessingError(code: Int, message: String, info: [String:Any]? = [:])

    var debugDescription: String {
        return "debug info: code: \(code)"
    }
    var localizedDescription: String {
        return "description: \(self)"
    }
}

Как получить доступ к свойствам, которые были переданы вызывающей стороной при создании моей ошибки?

1 Ответ

1 голос
/ 04 ноября 2019

Если вы хотите использовать значение, связанное с регистром перечисления, вы должны переключить его следующим образом:

enum SHError: Error {

    case InvalidInputError(code: Int, message: String, info: [String:Any]? = [:])
    case InvalidProcessingError(code: Int, message: String, info: [String:Any]? = [:])

    var debugDescription: String {
        let code: Int
        switch self {
        case .InvalidInputError(code: let codeValue, message: _, info: _):
            code = codeValue
        case .InvalidProcessingError(code: let codeValue, message: _, info: _):
            code = codeValue
        }
        return "debug info: code: \(code)"
    }

    var localizedDescription: String {
        return "description: \(self)"
    }
}

или вы можете создать отдельную вычисляемую переменную var code: Int и использовать ее в debugDescription:

enum SHError: Error {

    case InvalidInputError(code: Int, message: String, info: [String:Any]? = [:])
    case InvalidProcessingError(code: Int, message: String, info: [String:Any]? = [:])

    var debugDescription: String {
        return "debug info: code: \(code)"
    }

    var localizedDescription: String {
        return "description: \(self)"
    }

    var code: Int {
        switch self {
        case .InvalidInputError(code: let code, message: _, info: _):
            return code
        case .InvalidProcessingError(code: let code, message: _, info: _):
            return code
        }
    }
}
...