2016-05-25 6 views
1

So habe ich dieses ProtokollGibt es eine Möglichkeit, eine Standardimplementierung für ein Protokoll auf Swift vorzunehmen?

protocol Syncable { 
    func sync() 
} 

dann will ich ein anderes Protokoll erstellen, die die erste implementiert, sondern gibt auch andere Funktionen wie folgt umzusetzen:

protocol Repository:Syncable { 

    func propagateTop() 
    func propagateLow() 

    override func sync() { 
     propagateTop() 
     propagateLow() 
    } 
} 

So auf diese Weise diejenigen, die implementieren Repository müssen die beiden Funktionen implementieren, ohne die sync eines kennen oder implementieren zu müssen.

Gibt es trotzdem, um dies zu erzwingen?

Ich habe versucht, Repository eine Klasse und machen Unterklassen davon für jede Repository Ich will, aber das bedeutet nicht, dass jede Unterklasse diese 2 Methoden implementieren sollte.

+1

Die Swift-Programmiersprache hat einen [schönen und prägnanten Abschnitt über Protokollerweiterungen] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/ doc/uid/TP40014097-CH25-ID521) (und Protokolle im Allgemeinen), die ich definitiv empfehlen würde, zu lesen. – Hamish

Antwort

3

Ja, könnten Sie ein extension schreiben:

protocol Repository: Syncable { 
    func propagateTop() 
    func propagateLow() 
} 

extension Repository { 
    func sync() { 
     propagateTop() 
     propagateLow() 
    } 
} 

Eine Art Repository Implementierung wird die Standardimplementierung von sync() bekommen. Sie könnten immer noch eine spezialisierte Implementierung bereitstellen. Der Typ kann jedoch nicht den Standardwert Repository.sync in der Spezialisierung verwenden.

+0

danke das war genau das, was ich wollte – Mijail

Verwandte Themen