Swift assure une prise en charge intégrée de l'émission et de l'interception des erreurs récupérables au moment de l'exécution. Par exemple, si une opération de votre code échoue ou n'est pas valide, l'API génère une erreur HomeError. Cela simplifie et rationalise la gestion des erreurs en vous permettant de vous concentrer uniquement sur les erreurs récupérables. Vous pouvez ensuite proposer des options, par exemple en permettant à l'utilisateur de réessayer ou en affichant un message tel que "Structure introuvable". De plus, comme vous n'avez pas à gérer explicitement toutes les exceptions possibles, votre code est moins encombré et reste donc plus axé sur son objectif principal.
Voici un exemple de gestion d'un échec récupérable :
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
}
Le tableau suivant décrit la signification des
HomeError codes que vous
pouvez rencontrer :
| Code | Signification |
|---|---|
aborted |
L'opération a été annulée. Cela se produit généralement en cas de problème de simultanéité, tel qu'un échec de vérification de séquence ou un abandon de transaction. |
alreadyExists |
La ressource ou l'entité que vous essayez de créer existe déjà. Il peut s'agir, par exemple, d'une programmation nommée pour un thermostat. |
cancelled |
L'opération a été annulée, généralement par l'appelant. |
dataLoss |
Perte ou corruption de données irrécupérable. |
deadlineExceeded |
Le délai a expiré avant que l'opération ne puisse se terminer. Pour les opérations qui modifient l'état du système, cette erreur peut être affichée même si l'opération s'est terminée avec succès. Par exemple, une réponse réussie d'un serveur peut avoir été retardée suffisamment longtemps pour que le délai expire. |
failedPrecondition |
L'opération a été rejetée, car le système n'est pas dans l'état
requis pour son exécution. Par exemple, ce message peut s'afficher si vous appelez
stop
sur un four déjà arrêté. |
internal |
Erreurs internes. Cela signifie que certaines invariants attendus par le système sous-jacent ont été rompus. Ce code d'erreur est réservé aux erreurs graves. |
invalidArgument |
Le client a spécifié un argument incorrect. Notez que cela diffère de `failedPrecondition`. `invalidArgument` indique les arguments problématiques quel que soit l'état du système (par exemple, un nom de fichier incorrect). |
notFound |
Vous avez spécifié une entité ou une ressource introuvable. Par
exemple, spécifier un ID de piste inexistant lors de l'appel
play sur un appareil de lecteur multimédia. |
outOfRange |
Un paramètre a dépassé la plage valide, en fonction de l'état actuel du système état. Ce message s'affiche lorsque la valeur se trouve dans la plage de valeurs que l'appel d'API pourrait potentiellement accepter, mais n'a pas de sens dans le contexte actuel. |
permissionDenied |
Vous n'êtes pas autorisé à exécuter l'opération spécifiée. Ce code d'erreur ne doit pas être interprété comme signifiant que la requête est par ailleurs valide. |
resourceExhausted |
Une ressource est épuisée. Par exemple, cela peut être généré
lorsque vous appelez
dispense(item:amount:unit:presetName:) sur un distributeur
d'aliments pour animaux de compagnie et qu'il n'y a plus de nourriture dans l'unité.Cela peut également être dû au dépassement d'un quota de projet Home APIs. Pour en savoir plus, consultez la section Gestion des quotas. |
unauthenticated |
L'appelant ne peut pas être identifié ou la requête ne dispose pas d'identifiants d'authentification valides |
unavailable |
Le service est indisponible. Il s'agit probablement d'une condition temporaire qui peut être corrigée en réessayant après avoir laissé passer un intervalle entre les tentatives. Notez qu' il n'est pas toujours sûr de relancer des opérations non idempotentes. |
unimplemented |
L'opération demandée n'est pas implémentée, ni prise en charge ni activée dans ce service. |
unknown |
Erreur inconnue. En règle générale, unknown s'affiche
lorsqu'une condition d'erreur se produit et qu'elle ne peut être classée à l'aide d'aucun
autre code d'erreur. Par exemple, cette erreur peut être renvoyée lorsqu'une
valeur d'état est reçue d'une API externe qui ne dispose pas d'informations suffisantes sur la cause première. |