1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
| // main.swift
// SwiftCommandeEnLigne
import Foundation
class Personne {
// MARK: - Classe propriétés public
// public est préciser, il pourrait ne pas l'être
public static var Nombre: Int {return Personne.Cardinal}
// MARK: - Classe propriétés privée
private static var Cardinal: Int = 0
private static var Instances: Array<Personne> = []
private static var Référence = 1
// MARK: - Classe méthodes public
static func Lister() {
for personne in Personne.Instances {
print(personne.description)
}
}
static func Lister(prénom: String) {
for personne in Personne.Instances {
if personne.prénom == prénom {
print(personne.description)
}
}
}
static func Supprimer() {
Personne.Instances = []
}
static func Supprimer(instance personne: Personne?) {
var indice = 0
for instance in Personne.Instances {
if let personne = personne {
if personne.référence == instance.référence {
Personne.Instances.remove(at: indice)
break
}
}
indice += 1
}
}
// MARK: - init et deinit
init(nom:String, prénom:String) {
print("Après allocation ",terminator: "~> ")
self.nom = nom
self.prénom = prénom
self.référence = Personne.Référence
Personne.Cardinal += 1
Personne.Instances.append(self)
Personne.Référence += 1
print("init Personne ~> Réf: \(self.référence), Nom: \(nom), Prénom: \(prénom). Instance initialisée")
}
deinit {
print("Avant désallocation ",terminator: "~> ")
Personne.Cardinal -= 1
print("deinit \(self.description). Instance vers sa destruction")
}
// MARK: - Instance propriétés public
// Ici public est omis, description est public par défaut
var description: String {return "Personne ~> Rèf: \(référence) Nom: \(nom) Prénom: \(prénom)"}
// MARK: - Instance propriétés privée
private let référence: Int
private var nom: String
private var prénom: String
}
// =========================
// =========================
// MARK: - Début du programme
print("Début du programme main")
// Construction des instances de la classe personne
print("*** Création des instances de personnes ***")
weak var personne1: Personne? = Personne(nom: "PERNAUD", prénom: "Marie")
weak var personne2: Personne? = Personne(nom: "BARTEZ", prénom: "Claude")
weak var personne3: Personne? = Personne(nom: "GLOUTON", prénom: "Jean")
weak var personne4: Personne? = Personne(nom: "FORMIDABLE", prénom: "Claude")
weak var personne5: Personne? = Personne(nom: "GRANTECAFE", prénom: "Claude")
weak var personne6: Personne? = Personne(nom: "MUDIOFIKATE", prénom: "Thérèse")
// Seul le tableau "static Personne.Instances" retient les instances pour le compte de la classe Personne
// (les liens qu'il contient sont strong)
// De personne1 à personne6 aucune de ces variables ne retiennent leur instance pour le compte de la classe Personne
// (ils sont weak)
print()
print("=== Nombre de personnes ===")
print("Nombre d'instance de la classe Personne ~> \(Personne.Nombre)")
print()
print("=== Liste les personnes contenus dans la classe Personne ===")
Personne.Lister()
print()
print("=== Liste des personnes dont le prénom est Claude ===")
Personne.Lister(prénom: "Claude")
print()
print("=== Suppressions dans Personne.Instances en utilisant personne4 et personne1 ===")
Personne.Supprimer(instance: personne1)
Personne.Supprimer(instance: personne4)
print()
print("=== Vers quoi pointent maintenant personne4 et personne1 ? ===")
print (personne1?.description ?? "pointe sur rien ou nil")
print (personne4?.description ?? "pointe sur rien ou nil")
print()
print("=== Vers quoi pointe personne3 ? ===")
print (personne3?.description ?? "pointe sur rien ~> nil")
print()
print("=== Liste les personnes contenus dans la classe Personne ===")
Personne.Lister()
print()
print("=== Nombre de personnes ===")
print("Nombre d'instance de la classe Personne ~> \(Personne.Nombre)")
print()
print("=== Ajout d'une instance dans Personne <~ Nom: NOUVEAU Prénom: Claude")
personne1 = Personne(nom: "NOUVEAU", prénom: "Claude")
print("Nombre d'instance de la classe Personne ~> \(Personne.Nombre)")
print()
print("=== Vers quoi pointe personne1 ? ===")
print (personne1?.description ?? "pointe sur rien ~> nil")
print()
print("=== Liste des personnes dont le prénom est Claude ===")
Personne.Lister(prénom: "Claude")
print()
print("=== Suppressions de toutes les instances de la classe Personnes ===")
Personne.Supprimer()
print()
print("=== Nombre de personnes ===")
print("Nombre d'instance de la classe Personne ~> \(Personne.Nombre)")
// MARK: - Fin du programme
print()
print("Fin du programme et sortie avec code: 0") |
Partager