from Any? to Any
iLandes
Membre
Bonjour,
J'ai un warning dans un prochain dont je ne comprends pas la signification :
Expression implicite coerced from Any? to Any
Mon idée est que j'envoie qq chose de type [key: String, value: Any?] dans un dictionnaire de type [AnyHashable : Any]?
Comment mapper mon [key: String, value: Any?] en [key: String, value: Any] soit en supprimant les clés qui ont comme valeur nil soit en les retirant du tableau. Je pense qu'une fois les deux types identiques le warning va disparaitre.
Cela dit quelque chose à quelqu'un ?
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai vu ce message apparaitre avec la dernière version d'XCode, en utilisant print().
Le print(valeur) affiche le warning :
Il me propose 3 manières de régler l'avertissement. J'ai pris celle-ci et ça roule :
Je présume que Xcode est devenu encore plus rigoureux qu'avant sur le contrôle des types de données.
Car tu as assigné une valeur juste avant le print(...), tu peux, en toute sécurité, utiliser :
Merci Joanna mais plutôt
Sinon avec les [ on recrée un tableau ;-)
Grr non plus là on créé un tableau de turple (int:string!) :[
Avec mon code, tu commences avec un tableau de dictionnaires - et, après, tu auras un tableau de dictionnaires.
Le [$0 : $1!] est un dictionnaire de [Int : String]
Donc, qu'est-ce que tu veux ?
En fait non ::)
je voudrais :
Oui je sais, mais j'ai vraiment une aversion pour le !. Je trouve que cela ne fait pas propre dans un code.
EDIT : De plus je n'ai pas rencontré le problème avec un Int?. Là c'est juste un exemple simplifié pour montrer l'apparition du warning. En situation réelle cela se produit avec des objets pouvant vraiment être nil.
OK iLandes, c'est une merveille de programmation fonctionnelle :
Merci Joanna ;-)
Pour les print je fais cela :
Tu comprends ce qui fait le code dans le closure ? Ce n'était pas facile à trouver et, même moi, j'arrive à peine à le comprendre ??? ::)
Pour être plus concret j'ai modifier un eu l'exemple avec des données comme cela :
La sortie de console donne
En gros X est un tableau avec des infos clé/valeur de type [String:Any?]. Les clés sont en string et les valeurs en n'importe quoi (string, date, int...)
Y retire les clé/valeur quand la valeur est nil. On obtient donc un tableau clé/valeur de type [String:Any] débarrasser des clé/valeur non renseignée.
Je vois grosso modo ce que fait ton code bien que j'ai du mal à identifier $0 qui est [String : Any] et $1 qui est (key : String, value : any?) dans cette histoire.
Quoi qu'il en soit vous devez vous demander pourquoi faire tout cela pour résoudre mon problème initial de warning :
Le méchant compilateur n'est pas très coopératif en ne donnant pas clairement la ligne de se warning, juste la classe. >:(
Je me servais plus loin dans mon code de se tableau pour poster une notification comme ceci :
Maintenant je la poste comme ceci:
Evidement je n'utilise pas x ou y comme nom dans mon projet définit mais un nom plus explicite :]
Grace aux code de Larme qui transform x en y le warning disparait
Tordu ou pas ?
Si je me permet ? X n'est pas un tableau, c'est un dictionnaire. On peut, quand-même, dire que les sont la même chose mais, c'est une différence assez importante 8--)
Oui un dictionnaire tu as raison je suis dans l'euphorie de retrouver un projet sans warning.
Reste à résoudre pour mes connaissance personnelles d'où sorte ce $0, $1 c'est le seul truc que je pige pas bien dans ton code
Merci beaucoup !
Voilà bon !
Le code avec les paramètres nommés à la place des paramètres anonymes :