Paramètre Int utilisée dans une fonction ?

Il semblerait qu'il ne soit pas possible de modifier un paramètre Int a l'intérieur d'une fonction ?


 


D'abord est-ce exact ?


 


Obligeant a ajouter les 2 lignes a l'intérieur de la fonction comme dans ce bout de code



func calculRst(compteurA: UILabel, compteurB: UILabel, _Compteur: Int , _CompteurHier: Int){
var _Compteur = _Compteur
var _CompteurHier = _CompteurHier
let formateur = NumberFormatter()
_Compteur = formateur.number(from: compteurA.text!) as! Int
_CompteurHier = formateur.number(from: compteurB.text!) as! Int

A-t-on une solution plus clean ?


 


Plus on avance avec Swift et plus on découvre des lacunes cachées ? Aggrr....


Réponses

  • CéroceCéroce Membre, Modérateur
    décembre 2017 modifié #2

    Il semblerait qu'il ne soit pas possible de modifier un paramètre Int a l'intérieur d'une fonction ?
    D'abord est-ce exact ?

    Il me semble bien que oui, à  moins que le paramètre soit inout.
     

    Plus on avance avec Swift et plus on découvre des lacunes cachées ? Aggrr....

    Ce n'est pas une lacune, c'est un choix. Dans du code Swift bien écrit, on utilise toujours let plutôt que var si c'est possible, parce que pouvoir réattribuer une valeur à  un symbole est une source de bug potentielle.
     

    A-t-on une solution plus clean ?

    Pourquoi passer _Compteur et _CompteurHier, si c'est pour aller les écraser après ?

    P.S.: La création d'un NumberFormatter est lourde, conserve-le dans une propriété lazy.
  • Joanna CarterJoanna Carter Membre, Modérateur

    Pourquoi tout ce code ? Pourquoi cette méthode ?



    class ViewController: UIViewController
    {

    @IBOutlet weak var compteurA: UILabel!

    @IBOutlet weak var compteurB: UILabel!

    override func viewDidLoad()
    {
    super.viewDidLoad()

    guard let compteurAText = compteurA.text,
    let compteur = Int(compteurAText),
    let compteurBText = compteurB.text,
    let compteurHier = Int(compteurBText) else
    {
    return
    }
    }
    }

  • GercofisGercofis Membre
    décembre 2017 modifié #4
    Il vaut probablement quelques explications sur la démarche.
    Il s'agà®t d'une petite application perso (que je donne volontier) sur l'évaluation des coûts de consommation électrique.
    Mon compteur type TEMPO EDF possède 6 compteurs et donc 6 tarifs. Globalement heures pleines, heures creuses et suivant les jours 3 couleurs Bleu, Blanc et Rouge. La manipe consiste donc à  faire la différence entre 2 compteurs du même type. On a donc les 6 possibilités, et le résultat est multiplié par le prix du kw. Ensuite il faut additionner les 2 résultats d'une même couleur.
    D'où l'idée de ne faire qu'une fonction de calcul avec les paramètres correspondants. Et ça fonctionne.
    C'est en voulant simplifier en vue de stocker les valeurs que je voulais passer les compteurs en Int et les tarifs en Float.
    @joanna d'une façon générale je n'utilise que des let qui pour le coup passent en var. Si ça complique trop je renoncerai.
Connectez-vous ou Inscrivez-vous pour répondre.