Я ищу, как узнать, что ошибка моего типа, AppError
.
У меня в основном есть класс, определенный как class AppError<ErrorType>: Error {
.
Я тогда делаю
enum MyError {
case noApp
case noLabel
}
Мой бросок похож на throw AppError(type: MyError.noApp)
После улова я запускаю метод, в котором у меня возникают проблемы ...
static func handle(error: Error) {
print("App Error handled")
print(error);
let mine = error is AppError<Any>;
// This is always false
print(mine);
}
Я пробовал Any
и AnyObject
как Общий, но это всегда ложно.Печать error
всегда выглядит так: myapp.AppError<myapp.MyError>
Я хочу знать, что это AppError
, поэтому я могу вызывать методы, специфичные для него.
На практике я мог бы иметьтакие ошибки, как ConnectionError
, CreateError
и т. д. Все это зависит от AppError
.Я хочу, чтобы мой обработчик знал, что переданная ошибка основана на AppError
, который будет иметь свои собственные пользовательские свойства по сравнению с общей ошибкой из сторонней библиотеки, которая не будет иметь этих свойств.
Update Поскольку это может быть невозможно сделать, я попробовал следующее:
class ErrorHandler {
static func handle(error: Error) {
print("App Error handled")
print(error);
switch error {
// List all AppError<Types> here since <Any> won't work
case is AppError<MyError>:
self._handleAppError(error: error)
default:
print("Generic Error")
print(error);
}
}
private static func _handleAppError(error: AppError<Any>) {
print("My error!");
print(error);
print(error.type);
}
}
Проблема в том, что он жалуется Cannot convert value of type 'Error' to expected argument type 'AppError<Any>
, даже если он находится в строке, которая должна быть такого типа.