Swift “与”的区别是什么;让我们;及;静态let";?

Swift “与”的区别是什么;让我们;及;静态let";?,swift,static-variables,Swift,Static Variables,为什么??我希望Foo示例能够工作,因为fooValue的值是常量,编译时已知值和内存地址。但是我需要使用关键字static来工作。您不必实例化类来访问静态属性 如果您想在第一堂课中使用它 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
来工作。

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

如果您想在第一堂课中使用它

class Foo {
    let fooValue = 1
}

print(Foo.fooValue) // not work


class Bar {
    static let barValue = 1
}

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

通常,您希望对要访问的属性使用static,而不必每次都实例化对象。对于
Foo
类的每个实例(对象),都有一个单独的
fooValue

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

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

Foo().fooValue

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

作为一个
let
仅仅意味着它是一个常量,它与属性是从实例还是静态范围访问无关。另请参见感谢您的澄清。但是,在我的例子中,
let-fooValue=1
具有与
static let-barValue=1
相同的行为,因为两者都是常量值,但是,
Bar
花费的内存比
Foo
少。在什么情况下使用像
Foo
这样的代码更好?@Macabeus他们的行为完全不同。一个是为绑定到类的单个值分配一段内存,另一个是为从类创建的每个新实例分配一段内存以获得一个新值。它们的用例完全不同,但在学习面向对象编程的基础知识之前很难解释
class Human {
    static let numberOfLimbs = 4
    let name: String
}