within try throwing occur functions example errors else catch calls swift try-catch swift2

try - Swift 2: prueba/captura una función que no arroja



try catch swift 4 example (2)

Estoy refaccionando una clase Obj-c donde había un bloque @try/@catch alrededor de removeObserver:

Hacer lo mismo rápidamente removeObserver una advertencia ya que removeObserver puede fallar (cuando no hay observador) pero no arroja ningún error.

¿Alguna idea de cómo podría lograr el mismo comportamiento?

editar: Mi código:

try { self.removeObserver(self, forKeyPath: "LineDisplayChanged") }


Para eliminar la advertencia, simplemente elimine try { } . removeObserver:forKeyPath: está lanzando una excepción y no un error. Y no puede detectar excepciones en Swift, así que asegúrese de llamar a este método solo si lo observa, de lo contrario se bloqueará y no habrá forma de evitarlo en Swift.

Podría escribir una categoría en Objective-C que envuelva esta llamada y capture la excepción y devuelva un error.


El func removeObserver(_ anObserver: NSObject,forKeyPath keyPath: String) que llama proviene del protocolo NSKeyValueObserving y no arroja ninguna excepción.

Además, tenga en cuenta que en Swift 2 la sintaxis para la excepción (que en realidad son subclases enum ErrorType) ha cambiado y ahora es algo como esto:

do{ try functionThrowingExceptions() }catch ErrorTypeSubclassEnum.Value { // Do something }catch ErrorType { // Do something, catches everything else }

Vea esta publicación para más información.

Nota: Estoy usando KVO con la versión beta más reciente de XCode7, haciendo un self.removeObserver(self, forKeyPath: "path") no desencadena ningún error / advertencia.