2016-08-03 74 views
0

我知道擴展是爲了擴展你無法訪問原始源代碼的類型,但是一些開發者在自己創建它的類中使用了擴展。我在哪裏使用擴展名?

對不起,我的英語:(

例如:

class Category: Mappable { 
    var PostCategoryId: Int? 
    var Name: String? 
    private(set) var Slug: String? 
    private(set) var PostCategoryParentId: Int? 
    private(set) var PostCategoryParentPath: String? 
    var childCategories: [Category]? 
    var parentCategory: Category? 

    init() { 

    } 

} 

extension Category { 

    enum CategoryId: Int { 

     case Comedy = 4 
     case Action = 6 
     case Animation = 10 
    } 
} 
+1

有時它僅用於可讀性。例如。當我符合新的協議時,我可以通過擴展來實現,並且有乾淨的代碼。 – eMKa

+0

在你的情況下,它不會真正幫助你。 我只有在我有一個其他地方的課程時,我才使用它們,我沒有允許編輯,所以我可以使用擴展將類添加到課程中。或者當你需要編輯一個swift類時,你可以添加你自己的擴展函數。 – ahdgfd

+1

這不是重複的。另一個問題特別要求關於類的擴展,而這個問題更爲普遍,可能包括協議擴展。 – Lew

回答

1

的用途之一,我覺得可以從哪些必須符合協議時,實現的方法分離自己的邏輯是有用的例子:

class MyClass { 
    // My custom logic 
} 

extension MyClass : SomeProtocol { 
    // Implement protocol methods here 
} 

這是一個純粹的代碼組織的技巧,但我覺得它有助於讓事情更容易維護。

另一個例子是使用協議擴展來定義協議方法的默認實現。一個例子:

protocol Askable { 
    func ask() -> Int 
} 

extension Askable { 
    func ask() -> Int { 
     return 0 
    } 
} 

我敢肯定有一些其他用途的開發人員提出了,所以我期待着其他一些答案。當一個視圖具有一定的功能集合

+0

CoreData自定義ManagedObject's也是一個很好的例子。 –

-1

可以是有用的,與其它類延伸的功能,而且還具有一些其它可選功能,子類可以選擇使用或不(這是擴展名)

的例如,可能有一個擴展實現了一些可以在子類中重用的委託方法,也許在子類可能有也可能沒有的uiviewcontroller中有一個tableview,如果子類有tableview,那麼他們可以使用擴展而不是重寫代表方法的代碼(如果它始終是相同的代碼)