2017-10-04 26 views
0

首先,我想提一提,我是一個快速的初學者,這是我的第一個編程經驗。所以這些問題聽起來可能聽起來超級明顯......感謝您的理解:)覆蓋具有特殊類型(類)的函數作爲參數嗎?

有一些我不明白當訪問一個超類功能與子類重寫功能的同名。

這是一個涉及作爲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參數。這是因爲我們打算通過創建音樂實例來首先設置音樂參數? -

- 第三個問題:爲什麼我們談論的報價「特殊類型」?什麼是特殊類型呢?

非常感謝您閱讀所有這些!

+0

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID158 – BallpointBen

+0

謝謝,但我可以'在本文檔中找到與任何「特殊類型」相關的任何內容。在問我這裏的問題之前,我仔細研究過它:) – Pandemonium

回答

0

第一:你可以在這裏找到文檔:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID158

第二:您傳遞對象,調用musiç成超的play方法。即使你在override的方法M在繼承類,你可以訪問超類中方法M的原始實現。

第三個問題:爲什麼Music類型的自己擦肩而過對象insted的的[String]?這是OOP,你爲想要代表程序的實體創建類。另外,如您所見,類Music包含方法prepared,其中不包括Array類型。我想你會在未來增加一些新的有用的方法到Music班。

不要猶豫提問。

相關問題