您想要在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。 –