我正在开发一个涉及多个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() {
}
}
如果我尝试从任一类访问变量someVal
或ready
,我会收到错误;
class randomClass {
func test() {
print(Enemy.ready) //This doesn't work
print (badGuy.ready) // This doesn't work
}
}
我在这里做错了什么?我尝试在每个类中使用init()
函数,但这并不起作用。为了澄清,我希望有一个基类,然后有一个子类,其#34;类型"是基类,然后在子类中定义基类支持的每个变量的值。 badGuy
应该可以自动设置自己的someVal
。提前谢谢。
答案 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`