2017-04-11 5 views
0

Ich bin sehr neu in Swift und ich kann das nicht herausfinden. Ich muss die Anzahl der Instanzen zählen, die in einer Struktur erstellt werden. Da ich 3 Instanzen erstellt habe, wie kann ich dem Programm sagen, dass es drei sind? Ich habe den exNames.count am Ende versucht, aber das funktioniert nicht ... Danke!Zählen der Anzahl der Instanzen in einer Struktur in swift

struct People { 
    let name: String 
    var age: Int 
    let sex: Character 
} 

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 
+5

'exNames' ist ein leeres Array. - Werfen Sie einen Blick auf http://stackoverflow.com/questions/38021844/count-number-of-instances-of-a-class-swift. –

Antwort

2

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.

2

Sieht aus wie Sie eine Reihe von Menschen, in diesem Fall schaffen wollte:

struct People { 
    let name: String 
    var age: Int 
    let sex: Character 
} 

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") 

//This should be a var, because you are going to modify it 
var exNames = [People]() 

exNames.append(heather) 
exNames.append(peter) 
exNames.append(scott) 

exNames.count 
Verwandte Themen