Я не уверен, что это правильное поведение или непреднамеренное. У меня setup 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, кажется, что вы можете спросить экземпляр, что класс боеприпасов (или maxAmmunition), используя dynamicType.
println("CLASS - AMMUNITION: \(StealthFighter.ammunition)")
var myStealthFighter = StealthFighter()
println("INSTA - AMMUNITION: \(myStealthFighter.dynamicType.ammunition)")
.
// OUTPUT
// CLASS - AMMUNITION: 500
// INSTA - AMMUNITION: 500