Después de actualizar swift 2.0 tengo un error con do { try } catch como la imagen a continuación.

Errores generados a partir de aquí no son manejados por do { } catch en Swift 2.0

¿Cómo puedo solucionar este problema?
Gracias!

2 Comentarios

  1. 75

    El error te está diciendo que la envolvente de la captura no es exhaustiva. Esto es debido a que el auto-generado catch bloque es solo la captura de NSError objetos, y el compilador no puede saber si algún otro ErrorType será lanzado.

    Si estás seguro de que no hay otros errores serán arrojados, se puede agregar otro defecto bloque catch:

    do {
        objects = try managedObjectContext?.executeFetchRequest(request)
    } catch let error1 as NSError {
        error = error1
        objects = nil
    } catch {
        //Catch any other errors 
    }
  2. 10

    Además de la manipulación de los tipos de error que usted sabe que su función puede lanzar, usted necesita para controlar el error de tipo no sabe con universal bloques catch. Sólo use el bloque catch y de impresión de algunos generalizada mensaje de error al usuario.

    Ver a mi costumbre código de control de errores. Aquí, he creado una función que se va a imprimir un número si es impar y menor que 100.
    He manejado con dos tipos de Errores : Incluso y tooBig, para esto he creado una enumeración de tipo ErrorType.

       enum InvalidNumberError : ErrorType{
            case even
            case tooBig
       }
    
      //MARK: this function will print a number if it is less than 100 and odd
    
       func printSmallNumber(x :Int) throws{
    
            if x % 2 == 0 {
                 throw InvalidNumberError.even
            }
            else if x > 100 {
                 throw InvalidNumberError.tooBig
            }
    
            print("number is \(x)")
       }

    Código de control de errores es:

        do{
            try printSmallNumber(67)
        }catch InvalidNumberError.even{
            print("Number is Even")
        }catch InvalidNumberError.tooBig{
            print("Number is greater tha 100")
        }catch{
            print("some error")
        }

    Último bloque catch para manejar el error desconocido.

    Saludos!

    • No hay una manera de restringir los posibles errores generados por su func ? func printSmallNumber(x :Int) lanza InvalidNumberError ? Sería dulce si eso era posible.
    • esa es la respuesta correcta y la solución a mi respuesta de error del compilador.. thx

Dejar respuesta

Please enter your comment!
Please enter your name here