swift – 从实例访问类属性?

我不知道这是正确的行为还是意外的.我设置了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
你的假设是正确的.类型变量仅用于直接从类中访问.如果要从一个实例中获取它们,可以通过访问实例上的dynamicType属性来实现.
let thefighter = Stealthfighter()
let missiles = thefighter.dynamicType.missiles
println(missiles)

但是,我不认为这是正确的方式来让你来这里.假设你想要有一个类“Stealthfighter”,并且可能有这个类的多个实例,每一个具有独立于其他的导弹的能力,你应该可以通过简单地将类关键字.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...