[Résolu][Swift] Struct

maitomaito Membre
juillet 2015 modifié dans API UIKit #1

Bonjour, pour m'entrainer sur les structures, j'utilise le playground de Xcode et voici le code: 



//: Playground - noun: a place where people can play

import UIKit


struct Compteur {

var goal:Int = 0
var penality:Int = 0

var total:Int{
get{
return goal - penality
}
set(newValue){
goal = newValue + penality
print(newValue, appendNewline: true)
print("penality = \(penality)", appendNewline: true)
}
}

}

var compteur = Compteur()


compteur.penality = 2
compteur.total = 12

print(compteur.goal, appendNewline: true)


Ma question est : lorsque "compteur.total = 12" est devant "compteur.penality = 2" tout va bien mais lorsque "compteur.total = 12" est derrière "compteur.penalty = 2" le print me dis "penality = 0" et donc le total est de 12 au lieux de 14. Pourquoi ? En espéraient avoir été assez clair.


Merci d'avance. 


Réponses

  • AliGatorAliGator Membre, Modérateur
    Heu je viens de copier/coller ton code dans un playground Xcode, est moi j'ai bien le résultat attendu...

    Quand tu l'écris dans ce sens là , tu as bien un total de 14, contraiement à  ce que tu sembles affirmer

    compteur.penality = 2
    compteur.total = 12
    print(compteur.goal, appendNewline: true)
    // 12
    // penalty = 2
    // 14
    Par contre, évidemment, si tu l'écris dans ce sens là , tu as évidemment le "set(newValue)" de la propriété "total" qui est appelé en premier (calculant "goal = newValue + penalty" soit "12 + 0" " puisque tu n'as pas encore affecté le penalty à  ce moment " donc goal est alors affecté à  12. Puis tu affichesvia des print() les valeurs "newValue" (soit 12) et "penalty = 0"... et du coup quand à  la fin de ton script tu imprimes la valeur de goal, c'est bien le 12 que tu avais affecté au début), et donc c'est tout à  fait logique que ça t'affiche ce que j'ai mis ci-dessous

    compteur.total = 12
    compteur.penality = 2
    print(compteur.goal, appendNewline: true)
    // 12
    // penalty = 0
    // 12

    A moins que tu ne te sois trompé en posant ta question et tu as inversé les 2 cas lorsque tu as rédigé ton post (et dans ce cas ça veut dire que tu ne comprenais pas pourquoi penalty = 0... quand il n'est pas encore affecté au moment où tu appelles total = 2 ? Et du coup je viens de te l'expliquer)
  • Attention aussi le Playground est un peu taquin sur les résultats qu'il affiche. Les résultats ne sont pas toujours correctement rafraà®chis quand on fait beaucoup de changement. Il m'arrive de refermer et de le rouvrir quand j'ai un doute sur les résultats afficher pour lui permettre de tout recalculer. Mais il y a peut-être une méthode moins bourine de faire cela.


     


    D'une manière générale je ne même pas trop le playground pour faire des tests, même si l'idée est bonne il reste pas mal de choses incohérentes, je préfère faire des min app en mode console que je compile...


  • Merci AliGator tu as répondu a ma question.


    Je trouve aussi, Ilandes, que le playground a desfois des difficultés pour recompiler le tout.


    Merci beaucoup


  • Cela dit j'ai découvert la fonction Execute Playground dans le menu Editor de Xcode 6.4 (ça s'améliore... et Xcode 7 promet d'autres amélioration). Encore une fois on s'éloigne du sujet de base...


     


    Pardon 


    o:)


Connectez-vous ou Inscrivez-vous pour répondre.