Мне нужна функция, которая, в любом случае Error
, даст мне какое-то ее описание.
protocol CustomError { }
func customDescription(_ error: Error) -> String {
switch error {
case let customError as CustomError:
return "custom error"
case ???:
return "not subclass of NSError"
case let nsError as NSError:
return "subclass of NSError"
}
}
Выше не настоящий код, и мне нужно не String
описание, а Dictionary
, но это не важно в контексте вопроса.
Проблема в том, что я не знаю, как отличить Error
s, который является подклассом, NSError
а какой нет, потому что любая быстрая ошибка может быть устранена NSError
. Возможно ли это быстро?
Как вы уже заметили, к любому типу, соответствующему стандарту, Error
может быть применен мост NSError
, поэтому error is NSError
он всегда истинен, а приведение error as NSError
всегда выполняется успешно.
Что вы можете сделать, так это проверить динамический тип значения с помощью type(of:)
:
type(of: error) is NSError.Type
оценивается как true
если error
является экземпляром NSError
или подклассом.
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения