使用Swift类继承变量

时间:2017-04-15 15:07:18

标签: swift class inheritance

我正在开发一个涉及多个Swift文件的swift项目,每个文件都有一个类。我的目标是让一些类继承其他类的属性。出于某种原因,我无法访问任何课程。来自任何其他类的变量。例如,这是一个文件:

class Enemy {
    var ready = false
    var someVal = 0

    func someFunctions() {
    }
}

在另一个文件中,我试图创建一个继承自" Enemy"

的类
class badGuy: Enemy {
    ready = true  // This doesn't work as I would expect it to

    func badGuyFunction() {
    }
}

如果我尝试从任一类访问变量someValready,我会收到错误;

class randomClass {
    func test() {
        print(Enemy.ready) //This doesn't work
        print (badGuy.ready) // This doesn't work
    }
}

我在这里做错了什么?我尝试在每个类中使用init()函数,但这并不起作用。为了澄清,我希望有一个基类,然后有一个子类,其#34;类型"是基类,然后在子类中定义基类支持的每个变量的值。 badGuy应该可以自动设置自己的someVal。提前谢谢。

2 个答案:

答案 0 :(得分:4)

你非常接近。只需几个小编辑就可以按照您的意愿工作。

这是新的Enemy课程,与您原来的课程几乎相同。

class Enemy {

    var ready = false
    var someVal = 0

    func someFunction() {}

}

BadGuy子类可以在其初始化程序中设置其属性。

class BadGuy: Enemy {

    override init() {
        super.init()
        ready = true
    }

    func badGuyFunction() {}

}

然后你应该能够像这样使用它们:

let badGuy = BadGuy()
print(badGuy.ready) // prints `true`

答案 1 :(得分:1)

问题#1 是因为您必须在ready方法中覆盖 init

class Enemy {
    var ready = false
}

class BadGuy: Enemy {

    override init() {
        super.init()
        ready = true
    }
}

无法直接覆盖存储的属性。

问题#2 的出现是因为您在类型上调用实例方法。您需要创建类的实例。

class RandomClass {
    func test() {
        let enemy = Enemy()
        let badGuy = BadGuy()
        print(enemy.ready)
        print(badGuy.ready)
    }
}

let randomClass = RandomClass()
randomClass.test() // prints two lines `false` and `true`