“let”和“static let”有什么区别?

时间:2017-02-23 19:10:59

标签: swift static-variables

class Foo {
    let fooValue = 1
}

print(Foo.fooValue) // not work


class Bar {
    static let barValue = 1
}

print(Bar.barValue) // work; print "1"

为什么呢?我希望Foo示例能够正常工作,因为fooValue的值是编译时已知的常量,值和内存地址。但我需要使用关键字static来工作。

2 个答案:

答案 0 :(得分:13)

fooValue实例属性fooValue类的每个实例(对象)都有一个单独的Foo

barValue静态属性。有一个共享barValue属于该类。

这是一个更具体的例子。假设我有这门课:

class Human {
    static let numberOfLimbs = 4
    let name: String
}

如果我问你人类的名字是什么,你会发生什么?即Human.name。好吧,你不能回答我,因为没有一个人的名字。每个人都有一个单独的名字。但是,你可以告诉我人类拥有的肢体数量(Human.numberOfLimbs),这几乎总是为4。

答案 1 :(得分:0)

您不必实例化您的类来访问静态属性

如果你想在头等课程中使用

Foo().fooValue

通常你想为你想要访问的属性使用static而不必每次都实例化对象