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
来工作。
答案 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而不必每次都实例化对象