gpt4 book ai didi

快速便利初始化错误

转载 作者:行者123 更新时间:2023-11-28 07:16:15 24 4
gpt4 key购买 nike

我正在按照 WWDC 中有关 swift 初始化程序的建议执行代码。但是我看到错误“覆盖声明需要覆盖关键字”。有什么我想念的吗?

class Car{
var paintColour: Colour

init(colour: Colour){
self.paintColour = colour;
}
}

class Colour{

}

class RaceCar: Car {
var hasTurbo: Bool

init(colour: Colour, turbo: Bool){
self.hasTurbo = turbo;
super.init(colour: colour);
}

convenience init(colour: Colour) {
self.init(colour: colour, turbo: true);
}

}

但是在上面的便利初始化器中,我看到编译器错误“覆盖声明需要覆盖关键字”。

class FormulaOne: RaceCar{
init(color: Colour, hasTurbo: Bool){
super.init(colour: color, turbo: false);
}
}

当代码与 WWDC 视频中显示的代码完全相同时,出现此错误的原因是什么?

最佳答案

当你从 Car 类继承时,你继承了他的方法、属性和初始化器。

这个初始化

init(colour: Colour)

仍然在父类(super class) Car 中实现,因此如果要更改或添加更多功能,则必须编写 override。

在 FormulaOne 类中,init 函数没有相同的声明。

尝试改变

初始化(颜色:颜色,turbo: bool )

初始化(颜色:颜色,涡轮: bool )

编译器告诉你添加 convenience 关键字,因为在你的实现中你调用了 self.init 并且指定的 init 必须调用 super.init 而不是同一类中的另一个 init self.init

Swift 中有两种初始化器:Designated 和 Convenience。指定的init是主要的init。便利初始化是辅助初始化。

关于初始化器的 Swift 3 规则:

  1. 指定的 init 必须从其父类(super class)中调用指定的 init
  2. 便利 init 必须调用同一类中的另一个 init
  3. 便利 init 最终必须调用指定的 init。

说明了 Swift 3 规则:

rules illustrated

关于快速便利初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25934602/

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