2016-03-28 59 views
1

我正在閱讀另一個SO問題Swift do-try-catch syntax。在他的回答中,rickerster爲OP的自定義類創建了擴展。 Konrad77評論說這是「保持代碼清潔的真正好方法」。我尊重他們的知識,這導致我相信我在我自己的代碼中某處丟失了一點。我自己的自定義類中的擴展

除了清潔以外還有其他什麼好處(或者是爲我創建的課程創建擴展程序的原因)嗎?我可以直接將相同的功能放入課程中。如果我是唯一一個使用該課程的人,或者其他人將訪問該答案,答案會改變嗎?

+0

「除了清潔度以外還有其他任何好處或者是爲我創建的課程創建擴展的原因嗎?我可以直接將相同的功能放入課程中。」定義好處。我投票結束這個問題主要是基於意見,因爲答案只能基於偏好,而不是事實。擴展只是編寫類功能的另一種方式。他們如何使用和創建取決於原始程序員。 – JAL

+0

@JAL我尊重密切投票。他們實質上是回答我的問題。我以爲我錯過了這個過程的其他細微差別。 – Shades

+0

我不認爲這個問題是嚴格意見的。是的,答案將包含意見,但他們也有可能澄清擴展可以推廣的良好實踐。 – ColGraff

回答

5

在您從頭開始創建的類的情況下,擴展是通過結構的強大類型的文檔。您將類的核心放在初始定義中,然後添加擴展以提供附加功能。例如,添加遵守協議。它提供了所包含代碼的位置:

struct Foo { 
    let age: Int 
} 

extension Foo: CustomStringConvertible { 
    var description:String { return "age: \(age)" } 
} 

我可以將協議和計算屬性放在struct聲明中嗎?絕對,但是當你有超過一個或兩個屬性,它開始變得雜亂,難以閱讀。如果代碼不乾淨且不可讀,那麼創建錯誤會更容易。使用擴展程序是避免複雜性帶來困難的好方法。

+2

這並不回答這個問題,因爲OP特別提到「除了清潔」。 –

+3

以這種方式使用擴展程序不僅僅是簡單的清潔。編碼的一部分是使代碼易於理解並避免由於混淆而導致的錯誤。我們都知道有很多方法來編寫解決方案,許多最好的解決方案都是以清晰,簡潔,可讀的方式進行編寫的。通過對相關代碼進行分組,您可以提高代碼的實用性,而不僅僅是使其更清潔。它變成自我記錄。 – ColGraff

+2

這是所有「清潔」的擴展(雙關語並非意圖),它是一個包含可讀,結構化,易於調試和易於理解的代碼的全稱。 –