gpt4 book ai didi

ios - 重写具有特殊类型(类)作为参数的函数?

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

首先,我想提一下,我是一个快速的初学者,这是我第一次编程经历。所以这些问题对你们中的一些人来说可能听起来非常明显......感谢您的理解:)

当使用同名的子类重写函数访问父类(super class)函数时,有一些我不明白的事情。

这涉及我当前正在关注的教程中提到的“特殊类型”:

"The play(_:) method returns a String to be played. You might wonder why you would bother creating a special Music type, instead of just passing along a String array of notes. This provides several advantages: Creating Music helps build a vocabulary, enables the compiler to check your work, and creates a place for future expansion."

https://www.raywenderlich.com/160728/object-oriented-programming-swift

考虑以下代码:

class Music {

let notes: [String]

init(notes: [String]) {
self.notes = notes
}

func prepared() -> String {
return notes.joined(separator: " ")
}

}

class Instrument {

let model: String

init(model: String) {
self.model = model

}

func play(_ music: Music) -> String {
return music.prepared()
}

}

class Piano: Instrument {

let hasPedals: Bool

init(hasPedals: Bool, model: String) {
self.hasPedals = hasPedals
super.init(model: model)

}

override func play(_ music: Music) -> String {
let preparedNotes = super.play(music)
return "Piano playing \(preparedNotes)"

}

}

我的理解是:

  • 1) Music 类 允许我创建一个音符字符串。
  • 2) 这需要一个数组输入(使用初始化器)
  • 3) 然后使用 .joined(separator: "") 将此输入转换为字符串
  • 4) Instrument 类有一个 func play(_ music: Music) ,它接受 Music 类作为输入。参数名称为music:
  • 5) 参数 Music 可以通过创建 Music 类的实例来设置(如第 2 点所述)
  • 6) 类 Piano: Instrument 有一个 override func play(_ music: Music)
  • 7) 通过添加 let preparedNotes = super.play(music) 我们正在访问父类 func play(_ music: Music) (只是为了好玩它,因为在我看来我们没有添加任何更改,对吧?)

- 第一个问题:由于似乎可以使用类作为函数的参数,任何人都可以向我展示与此主题相关的任何文档吗?我搜索了 Apple 文档,但找不到任何相关信息...这真的让我很困惑。

- 第二个问题:有人可以向我解释一下,为什么我们在 super.play 之后使用(音乐)吗?当我使用自动完成功能时,命题是 super.play(music: Music) ,这非常令人困惑。就像我们在这里使用参数名称作为有效参数一样。这是因为,我们打算首先通过创建 Music 实例来设置 Music 参数吗?-

- 第三个问题:为什么我们在引文中谈论“特殊类型”?到底什么是特殊类型?

非常感谢您阅读所有这些!

最佳答案

首先:您可以在此处找到文档:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID158

第二:您将调用music的对象传递给父类(super class)的play方法。即使您覆盖继承类中的方法M,您也可以访问父类(super class)中方法M的原始实现。

第三个问题:为什么他们传递的类型为Music的对象而不是[String]?这就是 OOP,您为想要在程序中表示的实体创建类。另外,正如您所看到的,Music 类包含方法 prepared,该方法不包含 Array 类型。我认为您将来会在 Music 类中添加一些新的有用方法。

不要犹豫,提出问题。

关于ios - 重写具有特殊类型(类)作为参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46573786/

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