within unreachable try thrown throwing occur handling functions example errors error catch calls because are ios swift exception exception-handling

ios - unreachable - Una manera elegante de ignorar cualquier error arrojado por un método



try catch swift 4 example (1)

Estoy eliminando un archivo temporal con NSFileManager como este:

let fm = NSFileManager() fm.removeItemAtURL(fileURL) // error: "Call can throw but it is not marked with ''try''"

Realmente no me importa si el archivo está allí cuando se realiza la llamada y si ya se eliminó, que así sea.

¿Cuál sería una forma elegante de decirle a Swift que ignore los errores lanzados, sin usar do/catch ?


Si no te importa el éxito o no, puedes llamar

let fm = NSFileManager.defaultManager() _ = try? fm.removeItemAtURL(fileURL)

Desde "Manejo de errores" en la documentación de Swift:

¿Usas try? para manejar un error convirtiéndolo a un valor opcional. Si se produce un error al evaluar el try? expresión, el valor de la expresión es nil .

El removeItemAtURL() devuelve "nada" (aka Void ), por lo tanto, el valor de retorno de la try? la expresión es Optional<Void> . Asignar este valor de retorno a _ evita un "resultado de ''intentar''? es " advertencia " no utilizada .

Si solo está interesado en el resultado de la llamada pero no en el error particular que se produjo, entonces puede probar el valor de retorno de la try? contra nil :

if (try? fm.removeItemAtURL(fileURL)) == nil { print("failed") }

Actualización: A partir de Swift 3 (Xcode 8), no necesita la asignación ficticia, al menos no en este caso particular:

let fileURL = URL(fileURLWithPath: "/path/to/file") let fm = FileManager.default try? fm.removeItem(at: fileURL)

compila sin advertencias.