从实例访问类属性?

2024-03-14

我不确定这是正确的行为还是无意的。我已经设置了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' does not have a member named 'ammunition'我找不到任何提及这一点的内容,我假设类属性只能通过类访问?而不是在从它创建的任何实例上?我只是想确保我正确理解了这一点......

EDIT:

所以我可能把类型变量名称用错了,因为它应该是这样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”,并且可能有该类的多个实例,每个实例都能够拥有独立于其他实例的导弹数量,您应该通过简单地放弃 class 关键字来将其设为实例变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从实例访问类属性? 的相关文章

随机推荐