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.