En gros si je comprend bien, il ne faut pas utiliser Dictionnary (mais un Array) Ok ... mais dans ce cas la qu'est ce que je peux ecrire a la place de as? [Dictionary<String,String>] ?
Effectivement, les dictionnaires ne sont pas ordonnés en Swift. La première question qu'il faut se poser c'est : "Est-ce que l'ordre a vraiment une importance ?". Quand je regarde tes données, j'ai pas vraiment l'impression. Mais supposons que la réponse soit oui. Dans ce cas tu peux faire ta propre implémentation de dictionnaire trié. "Swift linked map" sur Google par exemple. Tu tomberais sur des trucs comme ça : https://www.timekl.com/blog/2014/06/02/learning-swift-ordered-dictionaries
Tu vas pouvoir me donner une piste de reflexion. Mon application iOS utilise une API. Pour mettre a jour les langues, je dois fournir un JSON contenant la liste des langues. Ce JSON est tres simple. Par exemple:
[{"en-GB":"3","ms":"0","am":"0"}]
Jusque la tout est ok.
Pour mettre a jour les langues dans mon application maintenant, je dois recuperer le JSON. Ca c'est ok. Je dois ensuite faire une iteration sur la liste des langues (d'ou le code plus haut). Peut etre que je m'y prend mal mais la je ne vois pas vraiment comment faire ca.
En Javascript ca donnerait ca:
var obj = JSON.parse('[{"en-GB":"3","ms":"0","am":"0"}]');
Dans ces 2 cas, l'ordre est conserve. en-GB est avant am
J'aimerai obtenir le meme comportement en Swift.
Je ne vois pas du tout comment decoder un JSON sans utiliser de struct (et donc decoder). En effet, la structure du JSON va dependre de l'API que je ne peux pas modifier...
Dans tous les exemples que je trouve, ils partent du principe que l'on connait a l'avance la structure du JSON et donc que l'on peut faire quelque chose de la forme:
let jsonDecoder = JSONDecoder()
let employee2 = try jsonDecoder.decode(Employee.self, from: jsonData)
C'est super si tu as la structure de Employee et que jsonData respecte cette structure. Dans mon cas, je ne connais pas la structure du JSON a l'avance mais j'aimerai recuperer les donnees. Qui plus et quand bien meme je connaitrai la structure du JSON, elle pourrait changer a n'importe quelle moment (car je n'ai pas la main sur l'API) causant un crach de mon application...
J'ai bien peur de ne pas comprendre du tout ta problématique.
Une API fournit un contrat d'interface. Même si on a pas la main sur l'API (c'est rarement le cas en vrai) on connait tout de même le format avec lequel l'API répond.
En quoi cela est-il si important que "en-GB" soit en premier ? Je pige pas. La clé change ?
Comme je disais, il y a des solutions pour implémenter son propre dictionnaire trié. cf le lien que j'ai donné.
Sinon, tu as SwiftyJSON qui te permet d'accéder aux éléments d'un son sans "struct" (même si je vois pas bien en quoi ça peut t'aider. De toute façon j'ai pas compris le problème.)
"En quoi cela est-il si important que "en-GB" soit en premier ? Je pige pas. La clé change ?"
Si dans le fichier JSON l'ordre est : en-GB, ms, fr-FR, am eh bien dans mon application je dois creer une liste de langues dans exactement le meme ordre. C'est a dire :