如何从自定义错误访问Swift属性?

如何从自定义错误访问Swift属性?

代码:

enum SHError: Error {

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

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

在创建错误时如何访问调用方传递的属性?

rree2009 回答:如何从自定义错误访问Swift属性?

如果要使用与枚举大小写关联的值,则必须以这种方式进行切换:

enum SHError: Error {

    case InvalidInputError(code: Int,message: String,info: [String:Any]? = [:])
    case InvalidProcessingError(code: Int,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,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,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,info: _):
            return code
        case .InvalidProcessingError(code: let code,info: _):
            return code
        }
    }
}
本文链接:https://www.f2er.com/3166724.html

大家都在问