Bonsoir,
Quelque chose comme ça ? (fait rapidement sur Playgrounds et non testé)
À chaque fois que tu crées un joueur, ça incrémente le nombre total de joueurs
À chaque fois que tu appelles la fonction doSomethingThatChangesTheLastPseudo, ça modifie le dernier pseudo utilisé
Cordialement
Nicolas
import Foundation
class Joueur {
static var dernierPseudoUtilise: String = ""
static var nombreDeJoueursCrees: Int = 0
var pseudo: String
var score:Int
init(pseudo: String, score: Int) {
self.pseudo = pseudo
self.score = score
Joueur.nombreDeJoueursCrees += 1
}
func doSomethingThatChangesTheLastPseudo() {
// do what you have to do
Joueur.dernierPseudoUtilise = self.pseudo
}
static func afficherStatistiques() {
print("Dernier Pseudo: \(dernierPseudoUtilise) Score: \(nombreDeJoueursCrees)")
}
func affiche() {
print("Pseudo: \(pseudo) - Score: \(score)")
}
}
Ton code n’est pas sécurisé. Si je comprend bien, les données de la classe Joueur sont définis à la création et ne doivent être accessibles qu’en lecture par la suite.
Il faut passer par des variables intermédiaires et des geters pour créer des variables ne pouvant être modifiés. Comme ça :
class Joueur {
private static var _nombreDeJoueursCrees: Int = 0
private static var _dernierPseudoUtilise: String = ""
private var _pseudo:String = ""
private var _score : Int = 0
var dernierPseudoUtilise: String {
get { return Joueur._dernierPseudoUtilise }
}
var nombreDeJoueursCrees: Int {
get { return Joueur._nombreDeJoueursCrees }
}
var pseudo: String {
get { return _pseudo }
}
var score:Int {
get { return _score }
}
init (pseudo: String, score: Int) {
self ._pseudo = pseudo
self ._score = score
Joueur._dernierPseudoUtilise = pseudo
Joueur._nombreDeJoueursCrees += 1
}
}
Code non testé, mais qui compile normalement. Je ferais une mini-application en SwiftUI pour tester correctement, demain …
Merci pour vos réponses et à Draken comme d’habitude
Est fait cela était évoqué dans le cours de Maxime sur la Poo mais je n’arrivais pas à le mettre en pratique
Voila ce que je voulais faire en définitive pour tester le principe
import Foundation
import SwiftUI
class Joueur {
private static var _dernierPseudoUtilise: String = « »
private static var _nombreDeJoueursCrees: Int = 0
var dernierPseudoUtilise: String {
get { return Joueur._dernierPseudoUtilise}
}
var nombreDeJoueursCrees: Int {
get { return Joueur._nombreDeJoueursCrees}
}
private var _pseudo: String = ""
var pseudo: String {
get { _pseudo }
set { _pseudo = newValue}
}
private var _score:Int
var score: Int {
get { _score}
set { _score = max(0,newValue) }
}
init(pseudo: String, score: Int) {
self._pseudo = pseudo
self._score = score
Joueur._dernierPseudoUtilise = pseudo
Joueur._nombreDeJoueursCrees += 1
}
static func afficherStatistiques() {
print("Dernier Pseudo: \(_dernierPseudoUtilise) Nombre de joueurs créés: \(_nombreDeJoueursCrees)")
}
func affiche() {
print("Pseudo: \(pseudo) - Score: \(score)")
}
}
let ahmed = Joueur(pseudo: « Ahmed », score: 2)
let michel = Joueur(pseudo: « Michel », score: 3)
let toto = Joueur(pseudo: « toto », score: 4)
print(ahmed.affiche())
//Plus d’accès aux variables locales //Joueur.dernierPseudoUtilise = « fff »
print(Joueur.afficherStatistiques())
Affichage
Pseudo: Ahmed - Score: 2 Dernier Pseudo: toto Nombre de joueurs créés: 3
Je ne me rappelle plus exactement mais je suis quasiment certain que j’ai aussi précisé de n’utiliser les variables statiques que dans de très rares cas et principalement pour des constantes.
Les variables statiques doivent être utilisées avec parcimonie au risque de te compliquer la vie sur ton projet.
Par exemple tes objets joueurs auront trop de responsabilités maintenant qu’ils gèrent les données des autres joueurs en plus de leurs données propres
Il vaut mieux créer un objet en amont qui gérera ta liste de joueurs et qui aura donc la possibilité de les compter, trouver le dernier pseudo, etc. Sans aucune variable statique
Perso, je n’ai jamais utilisé de variables Static (ou cela ne m’a pas laissé de souvenirs).
Il m’arrive parfois d’employer des fonctions Static dans une classe (ce qui est très différent des variables Static), pour régler des problèmes d’initialisation. Et c’est tout …