swift – 从实例访问类属性?
发布时间:2020-12-14 05:20:42 所属栏目:百科 来源:网络整理
导读:我不知道这是正确的行为还是意外的.我设置了StealthFighter,以便它返回一个名为ammunition的类类型计算属性变量. func globalTests() { println("globalTests") println("AMMUNITION: (StealthFighter.ammunition)") var myStealthFighter = StealthFighter
我不知道这是正确的行为还是意外的.我设置了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”,并且可能有这个类的多个实例,每一个具有独立于其他的导弹的能力,你应该可以通过简单地将类关键字. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |