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

Я пытаюсь сделать «базовую» ошибку, которая делает все, что я хочу сделать для всех моих ошибок, а затем расширяю ее для каждой ошибки, чтобы иметь разные ErrorType с.Я знаю, что на самом деле не могу расширить enum, поэтому я понятия не имею, как я смогу добиться чего-то подобного.Ниже мой текущий код.

class BaseError: Error {
    enum ErrorType {}

    typealias Context = [String:Any]?;

    private let type: ErrorType
    private let context: Context;
    private let line: Int;
    private let function: String;
    private let file: String;

    init(
        type: ErrorType,
        context: Context,
        line: Int = #line,
        file: String = #file,
        function: String = #function
        ) {
        self.type = type;
        self.context = context;
        self.line = line;
        self.function = function;
        self.file = file;


    }

}

class MyError: BaseError {
    enum ErrorType {
        case noApp
        case noLabel
    }
}

Я бы хотел сделать что-то вроде throw A11yError(type: .noApp).Это сейчас говорит мне Type 'BaseError.ErrorType' has no member 'noApp'.

1 Ответ

1 голос
/ 17 апреля 2019

Рассматривали ли вы использование дженериков для введения ErrorType?

class BaseError<ErrorType>: Error {

    typealias Context = [String:Any]?;

    private let type: ErrorType
    private let context: Context;
    private let line: Int;
    private let function: String;
    private let file: String;

    init(
        type: ErrorType,
        context: Context,
        line: Int = #line,
        file: String = #file,
        function: String = #function
        ) {
        self.type = type;
        self.context = context;
        self.line = line;
        self.function = function;
        self.file = file;


    }

}

enum MyError {
    case noApp
    case noLabel
}


let error = BaseError(type: MyError.noApp, context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...