2 votes

Puis-je utiliser le chaînage des options pour donner une valeur par défaut à la propriété d'une option ?

Est-il possible d'utiliser simultanément le chaînage optionnel et la coalescence des nils de cette manière ?

print("Meeting host: " + meeting.host?.email ?? “No host”)

J'aimerais faire cela mais je reçois une erreur disant que ma String ? n'est pas déballée. email est une chaîne non facultative.

Est-ce possible sans avoir à déballer host Si ce n'est pas le cas, pourquoi ma tentative de faire cela ne fonctionne-t-elle pas ?

3voto

Sweeper Points 1267

Il n'est pas nécessaire de le déballer pour qu'il fonctionne. Ce n'est pas pour cela que l'erreur s'est produite. Le site ?? est conçu pour gérer de tels cas, après tout.

L'erreur se produit en raison de la préséance des opérateurs. Le compilateur pense qu'il doit évaluer l'opérateur + d'abord, concaténer les deux chaînes de caractères, PUIS faire le nil-coalescing. Il voit que le deuxième opérande n'est pas déballé et se plaint.

Pour qu'il produise le résultat escompté, indiquez explicitement au compilateur d'évaluer la fonction ?? d'abord en ajoutant des parenthèses :

print("Meeting host: " + (meeting.host?.email ?? “No host”))

1voto

Oleg Danu Points 1490

Il existe une solution plus simple pour cela :

class Host {
    var email: String?
}

var host: Host? = nil
print("Meeting host: " + String(describing: host?.email))

La sortie est :

Hôte de la réunion : néant

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X