Ios Swift 4-无法调用';宇宙飞船。初始';毫无争议
这是我的密码。我已经在这上面呆了一段时间了。我只是想不通。我遵循的指南希望我在Fighter子类中使用super.init(),但每次尝试时它似乎都会给我一个错误Ios Swift 4-无法调用';宇宙飞船。初始';毫无争议,ios,swift,Ios,Swift,这是我的密码。我已经在这上面呆了一段时间了。我只是想不通。我遵循的指南希望我在Fighter子类中使用super.init(),但每次尝试时它似乎都会给我一个错误 class Spaceship { var name = String() var health = Int() var position = Int() init(name: String) { self.name = name } init(health: Int)
class Spaceship {
var name = String()
var health = Int()
var position = Int()
init(name: String) {
self.name = name
}
init(health: Int) {
self.health = health
}
init(position: Int) {
self.position = position
}
func moveLeft() {
position -= 1
}
func moveRight() {
position += 1
}
func wasHit() {
health -= 5
}
}
您没有将类中的所有实例变量设置为传递值的初始值设定项。除非有特定的有效默认值,否则每个值都有一个单独的
init
。我建议您阅读并可能修改代码,在Spaceship
中使用init(名称:health:position:)
初始值设定项,在Fighter
中使用init(名称:health:position:武器:remainingFirePower:)
初始值设定项调用super的实现并传递值
如果存在任何您永远不希望为空字符串或零的值,则不应为它们提供默认值,因此在初始值设定项中需要它们
这相当于将代码修改为具有指定的初始值设定项,该初始值设定项设置所有内容并具有默认值
class Spaceship {
var name : String
var health : Int
var position : Int
init(name: String = "", health: Int = 0, position: Int = 0) {
self.name = name
self.health = health
self.position = position
}
func moveLeft() {
position -= 1
}
func moveRight() {
position += 1
}
func wasHit() {
health -= 5
}
}
class Fighter: Spaceship {
let weapon: String
var remainingFirePower: Int
init(name: String = "", health: Int = 0, position: Int = 0, weapon: String = "", remainingFirePower: Int = 0) {
self.weapon = weapon
self.remainingFirePower = remainingFirePower
super.init(name: name, health: health, position: position)
}
func fire() {
if remainingFirePower > 0 {
remainingFirePower -= 1
} else {
print("You have no more fire power.")
}
}
}
太空船的所有初始值设定项都有一个参数。您必须调用一个初始值设定项并传递它所需的参数,或者向SpaceShip
添加一个不带参数的初始值设定项。因此,我尝试对其他2个进行super.init(名称:“”)和类似操作。它仍然不起作用。显然,我不允许有多个super.init声明。我还试图用逗号划出第一个想法,但也没用。你能给我举个例子吗?剩余火力
在init(武器…
)中没有初始值,你还需要加上它非常感谢你,瓦卡瓦马!(我刚刚也发现了,Tj3n,谢谢你)天哪!这太有道理了!谢谢你!
class Spaceship {
var name : String
var health : Int
var position : Int
init(name: String = "", health: Int = 0, position: Int = 0) {
self.name = name
self.health = health
self.position = position
}
func moveLeft() {
position -= 1
}
func moveRight() {
position += 1
}
func wasHit() {
health -= 5
}
}
class Fighter: Spaceship {
let weapon: String
var remainingFirePower: Int
init(name: String = "", health: Int = 0, position: Int = 0, weapon: String = "", remainingFirePower: Int = 0) {
self.weapon = weapon
self.remainingFirePower = remainingFirePower
super.init(name: name, health: health, position: position)
}
func fire() {
if remainingFirePower > 0 {
remainingFirePower -= 1
} else {
print("You have no more fire power.")
}
}
}