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 eltry?
expresión, el valor de la expresión esnil
.
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.