Swift proporciona compatibilidad integrada para lanzar y detectar errores recuperables en el tiempo de ejecución. Por ejemplo, si una operación en tu código falla o no es válida, la API lanza un error HomeError. Esto simplifica y optimiza el manejo de errores, ya que te permite enfocarte solo en los errores recuperables. Luego, puedes proporcionar opciones, como permitir que el usuario vuelva a intentarlo o mostrar un mensaje como "No se encontró la estructura". Además, como no tienes que controlar de forma explícita cada excepción posible, tu código está menos desordenado y, por lo tanto, se mantiene más enfocado en su propósito principal.
A continuación, se muestra un ejemplo de cómo se podría controlar una falla recuperable:
let light1 = lightDevices.first
if let light = light1 {
do {
try await structure.move(device: light, to: room)
} catch let error as HomeError {
// Code for handling the exception
}
En la siguiente tabla, se proporcionan los significados de los
HomeError códigos que puedes
encontrar:
| Código | Significado |
|---|---|
aborted |
Se anuló la operación. Por lo general, esto aparece cuando hay un problema de simultaneidad, como una falla en la verificación de la secuencia o la anulación de la transacción. |
alreadyExists |
El recurso o la entidad que intentas crear ya existe. Por ejemplo, podría ser una programación con nombre para un termostato. |
cancelled |
La operación se canceló (por lo general, la cancela el emisor). |
dataLoss |
Daño o pérdida de datos no recuperable. |
deadlineExceeded |
El plazo venció antes de que la operación se pudiera completar. En el caso de las operaciones que cambian el estado del sistema, es probable que se muestre este error incluso si la operación se completó correctamente. Por ejemplo, una respuesta correcta desde un servidor podría haberse demorado lo suficiente como para que el plazo venciera. |
failedPrecondition |
Se rechazó la operación porque el sistema no está en un estado
requerido para la ejecución de la operación. Por ejemplo, es posible que recibas
este mensaje si llamaste a
stop
en un horno que ya se detuvo. |
internal |
Errores internos. Esto significa que algunos invariantes que espera el sistema subyacente están rotos. Este código de error está reservado para errores graves. |
invalidArgument |
El cliente especificó un argumento no válido. Ten en cuenta que esto difiere de `failedPrecondition`. `invalidArgument` indica los argumentos que son problemáticos sin importar el estado del sistema (por ejemplo, un nombre de archivo con formato incorrecto). |
notFound |
Especificaste una entidad o un recurso que no se puede encontrar. Por
ejemplo, especificar un ID de pista inexistente cuando se llama a
play en un dispositivo de reproductor multimedia. |
outOfRange |
Un parámetro excedió el rango válido, según el estado actual del sistema estado. Este mensaje aparece cuando el valor está dentro del rango de valores que la llamada a la API podría aceptar, pero no tiene sentido en el contexto actual. |
permissionDenied |
No tienes permiso para ejecutar la operación especificada. Este código de error no debe interpretarse como que la solicitud es válida. |
resourceExhausted |
Se agotó algún recurso. Por ejemplo, esto se puede lanzar
cuando se llama a
dispense(item:amount:unit:presetName:) en un dispositivo de
comedero para mascotas y no queda comida en la unidad.Esto también puede deberse a que se excedió una cuota del proyecto de las APIs de Home. Para obtener más información, consulta Administración de cuotas. |
unauthenticated |
No se puede identificar al emisor o la solicitud no tiene credenciales de autenticación válidas |
unavailable |
El servicio no está disponible. Lo más probable es que esta sea una condición transitoria y que se pueda corregir si vuelves a intentar una retirada. Ten en cuenta que no siempre es seguro reintentar operaciones no idempotentes. |
unimplemented |
La operación solicitada no está implementada, admitida ni habilitada en este servicio. |
unknown |
Error desconocido. En términos generales, unknown aparece
cuando se produce una condición de error que no se puede clasificar con ninguno de
los otros códigos de error. Por ejemplo, este error puede mostrarse cuando un
valor de estado recibido de una API externa no tiene suficiente
información sobre la causa raíz. |