gpt4 book ai didi

swift - 在 super.init 初始化 self super.init 之前,在属性访问 'self' 中使用 'model'(品牌 : brand, 模型:模型)

转载 作者:可可西里 更新时间:2023-11-01 00:56:26 26 4
gpt4 key购买 nike

我正在学习本教程:https://www.raywenderlich.com/160728/object-oriented-programming-swift

...并尝试对代码进行一些个人调整,看看我是否能够自己理解一些核心概念。

我最终得到以下代码:

class Instrument {

var brand: String
var model: String

init(brand: String, model: String) {

self.brand = brand
self.model = model

}

func tune() {

print("\(model) tuned !")
}

func play() {

print("\(model) plays an improvised melody")

}

func perform() {

print(tune())
print(play())
}

}

这个子类:

class Piano: Instrument {

var hasPedals: Bool

init(hasPedals: Bool ) {

self.hasPedals = hasPedals
super.init(brand: brand, model: model)

}

}

此时,我收到以下错误消息:

Playground execution failed:

error: Object oriented programming.playground:28:41: error: use of 'self' in property access 'model' before super.init initializes self super.init(brand: brand, model: model) ^

error: Object oriented programming.playground:28:27: error: use of 'self' in property access 'brand' before super.init initializes self super.init(brand: brand, model: model)

我觉得这是一个非常明显的错误,但我不知道如何解决。


编辑:非常感谢你们提供 super 干净的答案。现在对我来说很有意义!

如果我理解正确,即使您在子类中使用自定义 init 方法,您也需要初始化所有存储的属性(来自父类(super class)和子类),对吧?

最佳答案

您正在调用父类(super class)的 init 方法来初始化您的子类的一部分。然而,在你初始化它之前,你传递了一个未初始化的变量。只需将这些变量添加到 Piano 的参数中即可:

init(hasPedals: Bool, brand: String, model: String)

关于swift - 在 super.init 初始化 self super.init 之前,在属性访问 'self' 中使用 'model'(品牌 : brand, 模型:模型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46510969/

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