2017-04-11 25 views
0

我对Swift非常陌生,我无法弄清楚这一点。我需要计算一个结构内创建的实例的数量。由于我创建了3个实例,我怎样才能让程序告诉我有三个实例?我在最后尝试了exNames.count,但那不起作用......谢谢!在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'是一个空数组。 - 看看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到外面的范围,你需要升级到一个class它提供了一个deinitializer deinit {}

请注意,静态计数器的“正确”用例非常有限。不同的锤子很可能会更好地解决您实际尝试解决的问题。

顺便说一句,你真的不应该使用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