2016-08-03 11 views
0

Ich weiß, dass die Erweiterung Typen zu erweitern, für die Sie nicht auf den ursprünglichen Quellcode zugreifen können, aber einige Entwickler verwenden Erweiterung in einer Klasse, die es selbst machen.wo verwende ich die extension?

sorry für mein Englisch :(

Beispiel:.

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

Manchmal wird es nur für die Lesbarkeit verwendet. Z.B. Wenn ich mich an das neue Protokoll anpasse, kann ich das mit der Erweiterung tun und sauberen Code haben. – eMKa

+0

In deinem Fall hilft es dir wirklich nicht. Ich benutze sie nur, wenn ich eine Klasse woanders in einer Bibliothek habe, die ich nicht bearbeiten durfte, also kann ich der Klasse eine Funktion mit Erweiterungen hinzufügen. Oder wenn Sie eine schnelle Klasse bearbeiten müssen, können Sie Ihre eigene Funktion mit der Erweiterung hinzufügen. – ahdgfd

+1

Dies ist kein Duplikat. Die andere Frage bezieht sich speziell auf Erweiterungen für Klassen, während diese Frage allgemeiner ist und Protokollerweiterungen enthalten könnte. – Lew

Antwort

1

Einer Verwendung ich Ihre eigene Logik von Verfahren zur Trennung sinnvoll sein, finden kann, die umgesetzt werden müssen, wenn sie ein Protokoll entsprechen Beispiel:

class MyClass { 
    // My custom logic 
} 

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

Dies ist eine reine Code Organisation Trick, aber ich finde es hilft, die Dinge zu halten, besser verwaltbar.

Ein weiteres Beispiel ist die Definition von Standardimplementierungen von Protokollmethoden mit Erweiterungen in Protokollen. Ein Beispiel:

protocol Askable { 
    func ask() -> Int 
} 

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

Ich bin sicher, es gibt einige andere Anwendungen Entwickler bis gekommen sind, mit so freue ich mich einige der anderen Antworten hier.

+0

CoreData benutzerdefinierte ManagedObject's kann auch ein gutes Beispiel sein. –

-1

kann nützlich sein, wenn eine Ansicht, die einen bestimmten Satz von Funktionen hat, mit anderen Klassen, die Erweiterung der Funktionalität, sondern auch einige andere optionale Funktionalität, die Unterklassen wählen oder nicht verwenden (was die Erweiterung)

Ein Beispiel vielleicht ist eine Erweiterung, die einige Delegate-Methoden implementiert, die in Unterklassen wiederverwendet werden könnten, vielleicht eine Tabellenansicht in einem uiviewcontroller, die Unterklassen haben können oder nicht, und wenn die Unterklasse die tableview hat, dann können sie die Erweiterung anstelle des Umschreibens verwenden der Code für die Delegate-Methoden (wenn es immer den gleichen Code sein wird)

Verwandte Themen