2017-04-11 3 views
0

私はSwiftにはとても新しいので、これを理解することはできません。私は構造体内で作成されたインスタンスの数を数える必要があります。私は3つのインスタンスを作成したので、どのようにしてプログラムが3つあると教えてもらえますか?私は最後にexNames.countを試しましたが、それは動作しません...ありがとう!すぐに構造体内のインスタンス数をカウントする

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'は空の配列です。 - http://stackoverflow.com/questions/38021844/count-number-of-instances-of-a-class-swiftを見てください。 –

答えて

2

People構造体では、静的変数を使用します。ただし、これはデフォルトのイニシャライザをオーバーライドする必要があります。

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 

struct sがスコープの外に出るときは、デクリメントのカウントにしたい場合は、deinitializer deinit {}を提供classにアップグレードする必要があります。

スタティックカウンタの「適切な」ユースケースは非常に限られていることに注意してください。あなたが実際に解決しようとしている問題は、別のハンマーでよりうまく処理される可能性が非常に高いです。ところで

は、あなたが本当に非常に密接に文字列に関連付けられていスウィフトで Characterとして、 sexを表現するために Characterを使用すべきではない、ので、彼らがいないフラグを付けるために、字句の目的のために構築され、最適化されています。 Swiftは有効な入力を確認することもできないため、多くの潜在的なバグの原因となります。 sexの値が "@"に誤って渡された場合はどうでしょうか?代わりに、 Boolタイプ、またはカスタムさらに機能が必要な場合は enum

2

あなたが、その場合には、人々の配列を作成したいように見える:

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 
関連する問題