bonjour
Soit une fonction qui appelle un élément d’un dictionnaire (ici le dictionnaire « jaune ») :
func afficherImage() -> Int {
if let elementAuHasardDuDictionnaire = jaune.randomElement()?.key {
elementAffiche = jaune[elementAuHasardDuDictionnaire]!
produitImageView.image = UIImage(named : elementAuHasardDuDictionnaire)
}
return elementAffiche
Cela tourne.
Maintenant, je souhaitais que le dictionnaire utilisé change selon une variable du type :
si l’utilisateur est au niveau 1, j’utilise le dictionnaire « jaune » ; si l’utilisateur est au niveau 2, j’utilise le dictionnaire « orange »…
J’ai donc fait un if else :
`func choixDuLevel()-> String {
if niveau == 1 {
level = "jaune"
} else if niveau == 2 {
level = "orange"
} else if niveau == 3 {
level = "rouge"
}
return level
}
func afficherImage() -> Int {
if let elementAuHasardDuDictionnaire = level.randomElement()?.key {
elementAffiche = level[elementAuHasardDuDictionnaire]!
produitImageView.image = UIImage(named : elementAuHasardDuDictionnaire)
}
return elementAffiche
}
Mais j’obtiens une erreur « Value of type ‹ Character › has no member ‹ key › » Mais « level » est une variable de type String ? Bref, je ne comprends pas le problème…
Ce serait plus efficace de retourner directement le dictionnaire concerné en fonction du niveau courant, sans passer par une variable intermédiaire.
Une possibilité :
let dicoJaune = ["blala":2, "truc":4]
let dicoOrange = ["pomme":65, "banane":6]
let dicoRouge = ["camion":32, "avion":12]
func chercherDictionnaireCourant(indexNiveau:Int) -> [String:Int]? {
switch indexNiveau {
case 1:
return dicoJaune
case 2:
return dicoOrange
case 3:
return dicoRouge
default:
return nil
}
}
Le code est plus complexe, parce que je prend en compte la possibilité d’une erreur sur l’identifiant numérique du niveau. Que va-t-il se passer dans ton code si la variable niveau contient 0, alors qu’il n’existe pas de niveau correspondant ?
Exemple d’utilisation dans le code :
let niveauJeu = 2
if let dicoCourant = chercherDictionnaireCourant(niveau: niveauJeu) {
// Faire quelque chose avec le dictionnaire
} else {
print ("Erreur dans la numérotation des Niveaux")
print ("Niveau demandé : ", niveauJeu)
}
J’affiche un message d’erreur si le numéro du niveau ne correspond pas à un dictionnaire. Cela n’est pas vraiment nécessaire, mais simplifie l’identification du problème en cas de bug.