gpt4 book ai didi

swift - 你能在 Swift 的子类中选择继承什么吗?

转载 作者:行者123 更新时间:2023-11-28 11:30:06 25 4
gpt4 key购买 nike

我有一个基类 (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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com