首先,我想提一提,我是一個快速的初學者,這是我的第一個編程經驗。所以這些問題聽起來可能聽起來超級明顯......感謝您的理解:)覆蓋具有特殊類型(類)的函數作爲參數嗎?
有一些我不明白當訪問一個超類功能與子類重寫功能的同名。
這是一個涉及作爲mentionned在政黨成員,我目前有一個「特殊類型」:
「戲(_ :)方法返回播放的字符串你可能會問,爲什麼 您可能會費心創建一個特殊的音樂類型,而不是僅僅通過 傳遞字符串數組,這提供了幾個優勢:創建音樂有助於創建詞彙表,使編譯器能夠檢查您的工作,併爲將來創建一個位置 擴展。「
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)
class Music
允許我創建筆記的字符串。 - 2)這需要一個輸入(使用初始值設定),這將是一個Array
- 3)該輸入,然後用.joined(隔離轉換:「「)爲String
- 4)類儀器具有接受類音樂作爲輸入的
func play(_ music: Music)
。參數名是音樂: - 5)參數音樂可以通過創建音樂類的實例(如在點2)
- 6)
class Piano: Instrument
具有override func play(_ music: Music)
- 7)中提到通過增加
let preparedNotes = super.play(music)
被設置我們訪問的是父類func play(_ music: Music)
(只是爲了好玩,因爲它做到這一點,我們添加任何改變有權不似乎對我?)
- 第一個問題:因爲它似乎是可能的使用一個類作爲函數的參數,任何人都可以向我展示任何與此主題相關的文檔?我搜索了蘋果文檔,卻沒有找到任何有關這方面的信息......這讓我很困惑。
- 第二個問題:可有人請向我解釋爲什麼我們super.play後使用(音樂)?當我使用自動完成時,命題是super.play(music: Music)
,這是超級混淆。這就像我們在這裏使用參數名稱作爲valide參數。這是因爲我們打算通過創建音樂實例來首先設置音樂參數? -
- 第三個問題:爲什麼我們談論的報價「特殊類型」?什麼是特殊類型呢?
非常感謝您閱讀所有這些!
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID158 – BallpointBen
謝謝,但我可以'在本文檔中找到與任何「特殊類型」相關的任何內容。在問我這裏的問題之前,我仔細研究過它:) – Pandemonium