我有一个基类 (Spaceship),它有一些变量和一个初始值设定项。 我还有一个子类 (UFO),它只需要父类(super class)的一个变量。 当我尝试创建一个基本的 UFO 对象时,我得到:“在调用 var c = UFO() 时缺少参数‘weapon’的参数” 我意识到错误消息要求武器参数,但我如何(甚至可能吗?)创建不需要武器参数的基本 UFO 对象?
花了几个小时修改“override”、“init”和“super”命令。我在 SO 和其他网站上阅读了很多文章,但没有看到任何与我的情况类似的例子。同样,我假设我想做的事情是可能的。
class Spaceship {
var isUFO = false
var weapon:String
init(weapon:String) {
self.weapon = weapon
}
func printSomething() {
print("Test")
}
}
class UFO: Spaceship {
}
var a = Spaceship(weapon:"Laser")
a.printSomething() //OUTPUT: Test
var b = UFO(weapon:"")
//This runs, but I don't want to have to fill in parameters
b.printSomething() //OUTPUT: Test
var c = UFO() //Ultimately this is what I want to do
c.printSomething()
//OUTPUT: missing argument for parameter 'weapon' in call var c = UFO()
最佳答案
你可以做的是将weapon
标记为optional String
。此外,在 init(weapon:)
中使用 weapon
的 默认值 作为 nil
,即
class Spaceship {
var isUFO = false
var weapon: String? //here...
init(weapon: String? = nil) { //here...
self.weapon = weapon
}
func printSomething() {
print("Test")
}
}
现在,您可以简单地创建带有和不带有weapon
的类UFO
的对象,即
var a = Spaceship(weapon:"Laser")
var b = UFO(weapon:"Another Weapon")
var c = UFO()
关于swift - 你能在 Swift 的子类中选择继承什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57055849/