我是 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
最佳答案
您想在 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
,它提供了一个析构器 deinit {}
。
请注意,静态计数器的“正确”用例非常有限。很可能您实际尝试解决的问题用不同的锤子会更好。
顺便说一句,你真的不应该使用 Character
来表示 sex
,因为 Swift 中的 Character
与字符串紧密相关,因此它们是为词法目的而构建和优化的,而不是为了标记。它还为许多潜在的错误打开了大门,因为 Swift 也无法验证有效输入(如果有人不小心将 sex
值传递给 "@"
怎么办?)相反,使用内置的 Bool
类型,或自定义enum
如果您需要更多功能。
关于swift - 快速计算结构内的实例数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43337059/