我不知道这是正确的行为还是意外的.我设置了Stealthfighter,以便它返回一个名为ammunition的类类型计算属性变量.
func globalTests() { println("globalTests") println("AMmunitION: \(Stealthfighter.ammunition)") var myStealthfighter = Stealthfighter() println("MISSILES: \(myStealthfighter.missiles)") println("AMmunitION: \(myStealthfighter.ammunition)") // ERROR } class Stealthfighter { class var ammunition:Int { return 500; } var missiles: Int = 5 }
当直接访问Stealthfighter类时,这样可以正常工作,并按预期返回500.但是,如果我创建和实例myStealthfighter,然后尝试访问实例上的类属性,我得到错误:“Stealthfighter”没有一个名为“弹药”的成员,我找不到任何提及,我假设从这该类属性只能通过类访问?而不是从它创建的任何实例?我只是想确保我正确理解这一点…
编辑:
所以我可能会写出类型变量名称错误,因为它应该是maxAmmunition,以表示Stealthfighters只能花费500发.我可以看到这一点,如果你想要maxAmmunition为类,那么你问类.
正如@Kreiri和@ 0x7fffffff指出的那样,你可以通过使用dynamicType来询问实例什么是类弹药(或maxAmmunition).
println("CLASS - AMmunitION: \(Stealthfighter.ammunition)") var myStealthfighter = Stealthfighter() println("INSTA - AMmunitION: \(myStealthfighter.dynamicType.ammunition)")
.
// OUTPUT // CLASS - AMmunitION: 500 // INSTA - AMmunitION: 500