У нас возникла проблема с объектом Error, который вылетает в коде Crashlytics Objective-c, потому что он не отвечает на userInfo
(член NSError
), во время исследования я наткнулся на это странное поведение в Swift.
На детской площадке я попытался создать класс SwiftError
, реализующий протокол Error
:
class SwiftError: Error {
}
let sError = SwiftError()
if sError is NSError { // Generates a warning: 'is' test is always true
print("Success")
} else {
print("Fail")
}
// Prints Fail
let nsError = sError as NSError
//Compiler Error: 'SwiftError' is not convertible to 'NSError'; did you mean to use 'as!' to force downcast?
- Проверка того, является ли SwiftError NSError, дает предупреждение о том, что он всегда успешен, но не работает во время выполнения.
- Приведение SwiftError как NSError приводит к ошибке компилятора.
Может ли кто-нибудь помочь мне объяснить, почему это происходит и как я могу узнать, действительно ли класс, реализующий протокол Error
, является NSError
или нет?
Спасибо!
as? NSError
- person Leo Dabus   schedule 08.03.2021Error
наNSError
? Если вы покажете свою актуальную проблему, мы можем предложить лучшую альтернативу - person Leo Dabus   schedule 08.03.2021sError as NSError
завершается ошибкой, только еслиsError
является экземпляром класса, вместо этого он компилируется со структурой или перечислением. И даже с классомlet nsError = sError as Error as NSError
компилируется. - person Martin R   schedule 08.03.2021Error as NSError
прямо противоположное, я пытался выяснить, действительно лиError
былNSError
, когда он показал мне предупреждение о том, что он всегда успешен. Это подтолкнуло меня к тому, чтобы углубиться в это поведение на детской площадке. То, что я увидел, не имело для меня смысла, поэтому я разместил этот вопрос. @matt @leo - person Mariam K.   schedule 12.03.2021