在 class 的实例中使用 class 变量

Using class variables within an instance of a class

我正在尝试使用 Swift 创建一个 class 的实例(class 是所需的类型)但是当我初始化实例时似乎class var 未应用于新实例。我确定有一个 init 调用或我缺少的东西,所以任何帮助都会非常有用。

class Person: NSObject {

    private struct personNameStruct { static var _personName: String = "" }

    class var personName: String
        {
        get { return personNameStruct._personName }
        set { personNameStruct._personName = newValue }
    }

}

var testPerson: Person
testPerson.personName = "Foo"   //"'person' does not have a member named 'personName'"

如果您使用 class 名称 person 而不是实例名称访问 personName 变量,它在 Playground 中对我有用:person.personName = "Foo".

这是因为 Swift 中的 class 变量类似于 Java 和 C# 等语言中的静态变量,因为它在 [=] 的所有实例之间共享20=]。如果您只想在 class 中使用 属性,则不应将其声明为 class var,而应将其声明为 var.

通过对实例的引用来引用实例成员。

class 成员是通过对 class 的引用来引用的。

因此,例如:

class Dog {
    class var whatDogsSay : String {
        return "Woof"
    }
    func bark() {
        println(Dog.whatDogsSay)
    }
}

要让狗吠,请创建一条狗 实例 并告诉它吠叫:

let d = Dog()
d.bark()

想知道狗怎么说,跟狗说话class:

let s = Dog.whatDogsSay