swift - 快速计算结构内的实例数

标签 swift struct count instances

我是 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/

相关文章:

ios - 我需要将 UIImagePickerController 代码从 Objective-C 转换为 Swift 语法

c++ - 避免在 C++ 中使用结构填充

c - linux内核中的时间戳错误?

php - 计算数据库中的行数并回显所需的行号

mysql - 使用 MySQL COUNT(1), COUNT(2) ...等使用 JOIN

ios - AVPlayer 暂停后不会继续播放

ios - tvOS 应用内存问题 : How to resolve it?

arrays - 如何比较结构和数组的值?

sql - 如何获得命名内部联接的非重复计数?

swift - 如何修复由于未捕获的异常 'RLMException' 、原因 : 'Realm accessed from incorrect thread.' ? 而终止应用程序