Swift 2: попробуйте/поймайте функцию не бросания
Я рефакторинг класса Obj-c, где был @try/@catch
блок вокруг removeObserver:
.
Выполнение такого же действия в быстрых запусках предупреждает, поскольку removeObserver
может завершиться с ошибкой (когда нет наблюдателя), но он не вызывает никаких ошибок.
Любая идея, как я мог бы достичь такого же поведения?
edit: Мой код:
try {
self.removeObserver(self, forKeyPath: "LineDisplayChanged")
}
Ответы
Ответ 1
Вы вызываете func removeObserver(_ anObserver: NSObject,forKeyPath keyPath: String)
из протокола NSKeyValueObserving
и не выбрасываете никаких исключений.
Кроме того, обратите внимание, что в Swift 2 синтаксис исключения (которые на самом деле являются подклассами перечисления ErrorType) изменился и теперь выглядит примерно так:
do{
try functionThrowingExceptions()
}catch ErrorTypeSubclassEnum.Value {
// Do something
}catch ErrorType {
// Do something, catches everything else
}
Подробнее см. этот пост.
Примечание. Я использую KVO с последней бета-версией XCode7, делая self.removeObserver(self, forKeyPath: "path")
не вызывает никаких ошибок/предупреждений.
Ответ 2
Чтобы удалить предупреждение, просто удалите try { }
. removeObserver:forKeyPath:
генерирует исключение, а не ошибку. И вы не можете перехватывать исключения в Swift, поэтому убедитесь, что вы вызываете этот метод только в том случае, если вы его наблюдаете, иначе он сработает, и в Swift его нет.
Вы можете написать категорию в Objective-C, которая обертывает этот вызов и захватывает исключение и возвращает ошибку.