它破坏了我对静态变量和常量的看法。
为什么斯威夫特不允许我们在其他方法中调用静态变量和常数?
例如:
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!!!这和其他语言真的不一样。
发布于 2016-04-11 09:06:26
静态变量必须使用它们的类型来处理,即使在这种类型中编写代码时也是如此。请参见Swift编程语言(Swift 2.2) -属性 (在“查询和设置类型属性”中):
类型属性是用点语法查询和设置的,就像实例属性一样。但是,类型属性是在类型上查询和设置的,而不是在该类型的实例上设置的。
在您的代码中,只需编写Aa.name而不是name,就可以了。
https://stackoverflow.com/questions/36544007
复制相似问题