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.