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