Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Swift类继承变量_Swift_Class_Inheritance - Fatal编程技术网

使用Swift类继承变量

使用Swift类继承变量,swift,class,inheritance,Swift,Class,Inheritance,我正在swift中从事一个项目,该项目涉及多个swift文件,每个文件中都有一个类。我的目标是让一些类继承其他类的属性。由于某些原因,我无法从任何其他类访问任何类的变量。例如,这里有一个文件: class Enemy { var ready = false var someVal = 0 func someFunctions() { } } 在另一个文件中,我尝试创建一个从“敌人”继承的类 如果我试图从任何一个类访问变量someVal或ready,我将收到一个

我正在swift中从事一个项目,该项目涉及多个swift文件,每个文件中都有一个类。我的目标是让一些类继承其他类的属性。由于某些原因,我无法从任何其他类访问任何类的变量。例如,这里有一个文件:

class Enemy {
    var ready = false
    var someVal = 0

    func someFunctions() {
    }
}
在另一个文件中,我尝试创建一个从“敌人”继承的类

如果我试图从任何一个类访问变量
someVal
ready
,我将收到一个错误

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

我做错了什么?我曾尝试在每个类中使用
init()
函数,但这不起作用。澄清一下,我想要有一个基类,然后有一个“type”是基类的子类,然后在子类中为基类支持的每个变量定义值
badGuy
应该能够自动设置自己的
someVal
。提前谢谢。

你们很接近了。只需进行一些小的编辑,它就能按您的意愿工作

这是新的
敌人
类,它与您原来的类几乎相同

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发生的原因是您必须在
init
方法中覆盖
ready

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`

谢谢我在编译时发现了错误。你说的“不工作”是什么意思?请提供实际问题描述。如果出现编译器错误,请显示这些错误。好的。如果我进入
随机类
并键入
敌人。
就绪
不会作为自动完成提供。如果我强制执行,编译器会说“
实例成员ready不能用于类型badGuy
”@Jake3231请用这些信息回答您的问题。编译器非常正确–您需要这些类的实例才能访问实例属性。如果要在类型上访问它们,请将它们设置为
静态
/
属性。谢谢。这是有道理的!我不知道我怎么会错过我在用打字机的事实!
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`