您想要在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
到外面的範圍,你需要升級到一個class
它提供了一個deinitializer deinit {}
。
請注意,靜態計數器的「正確」用例非常有限。不同的錘子很可能會更好地解決您實際嘗試解決的問題。
順便說一句,你真的不應該使用Character
表示sex
,如斯威夫特Character
非常密切相關的字符串,所以它們是建立和優化的詞彙,而不是用於標記。它也爲很多潛在的錯誤打開了大門,因爲Swift無法驗證有效輸入(如果有人不小心通過sex
值"@"
?)而是使用內置的Bool
類型或自定義如果您需要更多功能,請致電enum
。
'exNames'是一個空數組。 - 看看http://stackoverflow.com/questions/38021844/count-number-of-instances-of-a-class-swift。 –