gpt4 book ai didi

Swift:为什么非静态方法不能在没有动态类型的情况下调用静态变量和常量(static let)?

转载 作者:可可西里 更新时间:2023-11-01 00:59:45 29 4
gpt4 key购买 nike

使用swift后,它破坏了我对静态变量和常量的看法。

为什么swift不允许我们在其他方法中调用静态变量和常量?

例如:

class Aa {
static let name = "Aario"
func echo() {
print(name) // Error!
}
}

先生。食人魔告诉我使用 dynamicType

class Aa {
static var name = "Aario"
func echo() {
print(self.dynamicType.name)
}
}

let a = Aa()
a.dynamicType.name = "Aario Ai"
a.echo() // it works!!!

有效!那为什么要用dynamicType来调用静态变量呢?

最后的答案是:

class Aa {
static var name = "Static Variable"
var name = "Member Variable"
func echo() {
print(self.dynamicType.name) // Static Variable
print(Aa.name) // Static Variable
print(name) // Member Variable
}
}

let a = Aa()
a.dynamicType.name = "Aario Ai"
Aa.name = "Static: Aario"
a.name = "Member: Aario"
a.echo() // it works!!!

它与其他语言真的很不一样。

最佳答案

静态变量必须用它们的类型来寻址,即使您在这种类型中编写代码也是如此。参见 The Swift Programming Language (Swift 2.2) - Properties (在“查询和设置类型属性”中):

Type properties are queried and set with dot syntax, just like instance properties. However, type properties are queried and set on the type, not on an instance of that type.

在您的代码中,只需编写 Aa.name 而不是 name 就可以了。

关于Swift:为什么非静态方法不能在没有动态类型的情况下调用静态变量和常量(static let)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36544007/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com