Swift Erklären Klasse Func im Protokoll

Hatte ich folgende Verwirrung. Soweit ich weiß ist der Hauptunterschied zwischen statische und Klasse Schlüsselwörter bei der Deklaration der Methode ist, dass die zweite könnte man überschreiben in Unterklassen.

Das problem

Allerdings, wenn ich erklären ein protocol in Swift 1.2 wie dieses:

protocol MyProtocol
{
    class func dummyClassMethod()
}

compiler gibt eine Fehlermeldung:

Klassenmethoden dürfen nur innerhalb von Klassen; verwenden Sie 'static' deklarieren
eine statische Methode

Die Fehlermeldung ist ziemlich eindeutig wie offensichtlich MyProtocol ist nicht eine Klasse, jedoch möchte ich eine Klasse func Teil des Protokolls.

, Was ich versucht habe

Ich habe festgestellt, dass wenn ich erkläre Schnittstelle im Protokoll als statische, compiler freut sich, und ich konnte verwenden Sie diese statische Methode in allen Klassen, in denen dieses Protokoll:

protocol MyProtocol
{
    static func dummyClassMethod()
}

Die Frage

Also meine Frage ist im Grunde ist das richtig? Diese Erklärung besagt, dass meine Klasse die Methode nicht überschrieben werden kann, bei Kindern jedoch in meiner Umsetzung, ich könnte schreiben, und verwenden Sie die folgenden:

class ClassA: MyProtocol
{
    class func dummyClassMethod() {

    }
}

class ClassB: ClassA
{
    override class func dummyClassMethod() {

    }
}

und jetzt meine dummyClassMethod ist nicht statisch, mehr...

  1. Compiler ist Ok und alles funktioniert - aber warum?

  2. Ist es spezifisch auf die Tatsache, dass die Schnittstelle selbst ist statisch, aber
    es ist die Umsetzung nicht?

  3. Gibt es eine bessere alternative für die Klasse func-im-Protokolle?

Objective-C-Lösung

In ObjC dies ist sehr einfach und kompilieren & laufen einwandfrei:

@protocol MyProtocol 

+(void)dummyClassMethod;

@end
  • Ich weiß, dass es sich nicht auf deine Frage, aber warum müssen Sie Unterklassen?
  • Ich nicht an der Zeit, dies zu schreiben, aber wer weiß in der Zukunft. Ich bin mehr in das Verständnis, wie es funktioniert, also ich kann Sie richtig verwenden.
  • war diese Frage lösen op? Ich bin neu in swift.
  • Nicht im Swift-1.2, ich habe keine Erfahrung mit 2.0, obwohl...
InformationsquelleAutor hris.to | 2015-05-14
Schreibe einen Kommentar