Exercice calculette

#1

Je m’attaque à l’exercice de la calculette et j’ai une erreur que je n’explique pas dans un Outlet, j’ai bien veillé à suivre la procédure.

Voici le code :

import UIKit

class ViewController: UIViewController {


    //déclaration des variables globales
    
    //valeur de l'affichage initial
    var valeurAffichage: Float = 0
    
    //variables pour le calcul
    var premierNombre: Float = 0
    var deuxiemeNombre: Float = 0
    var operateur: String = ""
    
    
    //initialisation de l'afficheur
    @IBOutlet weak var afficheResultat: UILabel!
    afficheResultat.text = valeurAffichage
    
    
    //gestion du bouton AC
    @IBAction func resetAffichage(_ sender: Any) {
        valeurAffichage = 0
        premierNombre = 0
        deuxiemeNombre = 0
        operateur = ""
    }

    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

}

et l’erreur :

Et je n’arrive pas à comprendre pourquoi il demande une déclaration alors que l’objet semble bien lié.

Merci

#2

Salut,
Le problème est que sur un label, tu dois avoir un format string et tu lui donnes un float donc, un format numérique.

Pour résoudre ton erreur, tu dois convertir ton float en string : string(valeurAffichage)

#3

Le contrôle graphique attend une chaine de caractères. Toi tu lui donnes un valeur numérique. Il faut la convertir avant. Quelque chose comme :

afficheResultat.text = String(valeurAffichage)

Grilled par Anthony qui tape plus vite que moi !!

1 Like
#4

J’ai commencé avant toi ^^
Bon, ça me rassure on a vue la même chose

#5

C’est ultra-classique comme erreur. Je l’ai faite des dizaines de fois en débutant …

#6

Je pense qu’on la tous eu droit au moins une fois sinon, c’est pas marrant.

@sulistef je rajouterais que normalement si, tu clics sur le point d’exclamation de l’erreur, il te précise l’erreur. Des fois il te dit de façon précise et dans d’autre cas, il faut quand même chercher.
Mais, dans le cas la, je suis quasi certain qu’il te dit un trucs du genre qu’il veux une String.

#7

Merci beaucoup pour vos retours !

J’ai fait la modif mais il me donne toujours la même erreur et refuse de compiler : “expected declaration”.

Quand je tape le début de la variable afficheResultat, par exemple “affiche” la liste ne me propose pas la variable qui est déclarée en outlet juste au-dessus.

J’ai fait un test en changeant le type de valeurAffichage en “String” et en affectant la valeur, puis en déclarant une nouvelle variable de type “String” et en y affectant la valeur valeurAffichage, et toujours pareil.

#8

Salut :wave:, Je pense que ton problème est lié au fait que tes instructions ne se trouve pas dans une fonction. tente de mettre dans une func et dis nous

1 Like
#9

Mais oui, c’est Bombababas qui a trouvé !
Les objets graphiques du Storyboard n’existent pas au démarrage de l’application. Il faut attendre que iOS les crées pour les utiliser. C’est justement le rôle de la fonction viewDidLoad() qui s’exécute immédiatement APRES la création de l’interface graphique par le Storyboard.

Si tu veux initialiser ton interface par code, il faut le faire à l’intérieur de viewDidLoad().

1 Like
#10

Exemple :

J’ai reproduis la même situation que toi, en écrivant un texte dans un label du Storyboard.

L’initialisation du Label n’est possible qu’à partir du moment où il a été crée par iOS, donc APRES l’appel de la fonction viewDidLoad().

Si je modifie le Label dans le corps de la fonction, cela fonctionne.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var monLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        monLabel.text = "Salut les amis !"
    }

}

La preuve en image :

EDIT : Et pour écrire une valeur numérique dans le Label :

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var monLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let uneValeur = 12765
        monLabel.text = String(uneValeur)
    }

}

1 Like
#11

Super !!!
Merci beaucoup, je crois que je n’aurais pas cherché de ce côté.

Merci pour votre aide précieuse et rapide

1 Like
#12

Bonne continuation dans ton apprentissage !

1 Like