为什么要定义一个静态常数,该常数取决于相同类型的另一个静态常数,但不取决于属性?

问题描述 投票:1回答:1

我熟悉在初始化所有属性之前尝试访问self时遇到的错误。我从未理解的一件事是,为什么我可以在不依赖任何错误的情况下,在相同的static中初始化具有static常数的其他依赖项。

这种行为的原因是什么?为什么定义type常量不给我编译时错误,而属性常量却给了我?

某些代码:

static

必须有时会将该结构加载到内存中,或者有时加载静态变量。我看到的时间与创建struct MyStruct { static let myStatic = 1 // No error on this line... static let myStaticPlusOne = myStatic + 1 let myInstance = 1 // ... But a compile time error on this one! What makes the difference? let myInstancePlusOne = myInstance + 1 } 的新实例的时间完全相同。我不能清楚地看到两者之间的区别。两者都有一个属性被初始化而另一个没有被初始化的时间。比起为什么我仍然可以从另一个静态变量访问我的静态变量?

swift static-variables
1个回答
1
投票

类型和实例。

  • MyStruct类型始终存在。 type属性属于该类型。因此,他们就坐在那里,可以做任何自己喜欢或以任何方式建立联系的事情。

  • 每次您说static时,都必须创建MyStruct的实例。当您这样说时,必须初始化实例属性。实例(不是MyStruct(...))属性属于该实例。因此,其初始值设定项的值不能引用static,因为self正是我们在创建实例(即实例)过程中所需要的值。这行:

    self

    ...真的是]

    let myInstancePlusOne = myInstance + 1
    

    ...但是,这恰恰是您不允许说的话;在初始化此属性时,尚没有let myInstancePlusOne = self.myInstance + 1 ,这是您正在初始化的内容。

© www.soinside.com 2019 - 2024. All rights reserved.