Gestion des erreurs sur iOS

Swift fournit une compatibilité intégrée pour générer et intercepter 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 laisser l'utilisateur réessayer ou afficher un message tel que "Structure introuvable". De plus, comme vous n'avez pas besoin de gérer explicitement toutes les exceptions possibles, votre code est moins encombré et reste donc plus concentré 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 fournit la signification des codes HomeError que vous pouvez rencontrer :

Table : codes HomeError
Code Signification
aborted L'opération a été annulée. Ce message s'affiche 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 renvoyée même si l'opération s'est terminée correctement. Par exemple, une réponse positive 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 un état requis pour exécuter l'opération. Par exemple, vous pouvez recevoir ce message si vous avez appelé stop sur un four qui est déjà arrêté.
internal Erreurs internes. Cela signifie que certains 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 cette erreur 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 titre inexistant lors de l'appel de play sur un lecteur multimédia.
outOfRange Un paramètre a dépassé la plage valide, en fonction de l'état actuel du système. Ce message s'affiche lorsque la valeur se situe dans la plage de valeurs que l'appel d'API pourrait potentiellement accepter, mais qu'elle n'a pas de sens dans le contexte actuel.
permissionDenied Vous ne disposez pas des autorisations nécessaires pour 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 valide.
resourceExhausted Certaines ressources sont épuisées. Par exemple, cela peut se produire lorsqu'un utilisateur appelle dispense(item:amount:unit:presetName:) sur un distributeur de nourriture pour animaux et qu'il n'y a plus de nourriture dans l'appareil.

Cela peut également être dû au dépassement d'un quota de projet des API Home. Pour en savoir plus, consultez 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 que relancer des opérations non idempotentes peut présenter des risques.
unimplemented L'opération demandée n'est pas implémentée, prise en charge ou 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 pas être classée à l'aide d'un autre code d'erreur. Par exemple, cette erreur peut s'afficher lorsqu'une valeur d'état reçue d'une API externe ne fournit pas suffisamment d'informations sur la cause racine.