Sie möchten eine statische Variable für die Struktur People
verwenden. Dies erfordert jedoch das Überschreiben des Standardinitialisierers.
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
Wenn Sie Dekrement wollen die Zählung, wenn die struct
s out of scope gehen, müssen Sie auf eine class
aktualisieren, die deinit {}
eine deinitializer zur Verfügung stellt.
Beachten Sie, dass die "richtigen" Anwendungsfälle für einen statischen Zähler äußerst begrenzt sind. Es ist sehr wahrscheinlich, dass das Problem, das Sie tatsächlich lösen wollen, besser durch einen anderen Hammer bedient wird.
By the way, sollten Sie wirklich nicht Character
verwenden sex
, wie Character
in Swift darzustellen ist sehr eng mit Saiten gebunden, und so sind sie gebaut und für lexikalische Zwecke optimiert, nicht für das Markieren. Es öffnet auch die Tür für viele potentielle Fehler, da Swift nicht in der Lage ist, gültige Eingaben zu verifizieren (was passiert, wenn jemand zufällig einen sex
Wert von übergibt?) Verwenden Sie stattdessen den eingebauten Bool
Typ oder eine benutzerdefinierte enum
wenn Sie mehr Funktionalität benötigen.
'exNames' ist ein leeres Array. - Werfen Sie einen Blick auf http://stackoverflow.com/questions/38021844/count-number-of-instances-of-a-class-swift. –