Vous souhaitez utiliser une variable statique sur la structure People
. Cependant, cela nécessite de remplacer l'initialiseur par défaut.
struct People
{
static var instances = 0
let name:String
var age:Int
let sex:Character
init(name:String, age:Int, sex:Character)
{
self.name = name
self.age = age
self.sex = sex
People.instances += 1
}
}
var heather = People(name: "Heather", age: 32, sex: "F")
var peter = People(name: "Peter", age: 34, sex: "M")
var scott = People(name: "Scott", age: 27, sex: "M")
let exNames = [People]()
/* exNames.count only gives the number of People that are
contained in this particular array, which is zero. */
print(People.instances) // 3
Si vous voulez décrément le compte lorsque les struct
s sont hors de portée, vous devez passer à un class
qui fournit un deinitializer deinit {}
. Notez que les cas d'utilisation «appropriés» pour un compteur statique sont extrêmement limités. Il est très probable que le problème que vous essayez de résoudre serait mieux servi par un autre marteau.
Par ailleurs, vous devriez vraiment pas utiliser Character
pour représenter sex
, comme Character
à Swift est très étroitement liée à des chaînes, et ils sont conçus et optimisés à des fins lexicales, et non pour signaler. Il ouvre également la porte à de nombreux bugs potentiels, car Swift ne pourra pas non plus vérifier les entrées valides (que se passe-t-il si quelqu'un passe accidentellement une valeur de "@"
?). enum
si vous avez besoin de plus de fonctionnalités.
'exNames' est un tableau vide. - Jetez un oeil à http://stackoverflow.com/questions/38021844/count-number-of-instances-of-a-class-swift. –