Kandidat ist nicht '@objc', aber Protokoll braucht es
Habe ich nach dieser tutorial zu lernen, swift & iOS-app-Entwicklung. Im Abschnitt Protokoll, das tutorial definiert die folgenden Protokoll:
@objc protocol Speaker {
func Speak()
optional func TellJoke()
}
Er sagt Wenn Sie wollen, um ein Protokoll mit optionalen Methoden, müssen Sie das Präfix des Protokolls mit @objc-tag (auch wenn deine Klasse nicht die Interoperation mit objective-C).
Dann zeigt es das Beispiel, um das Protokoll umzusetzen:
class Vicki: Speaker {
func Speak() {
println("Hello, I am Vicki!")
}
func TellJoke() {
println("Q: What did Sushi A say to Sushi B?")
}
}
Habe ich versucht, den oben genannten code in mein xcode Spielplatz, aber ich habe die compiler-Fehlermeldung "Geben Sie Vicki nicht entsprechen-Protokoll-Lautsprecher".
Xcode erscheint auch eine fix-it text sagt "Kandidat ist nicht '@objc', aber Protokoll braucht es".
Erhalte ich völlig verwirrt jetzt, das tutorial nicht erwähnt, diese Fehler überhaupt. Könnte jemand bitte erklären Sie mir, all dies, um mich, klar? Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ich sagen kann, markieren Sie Ihr Protokoll als @objc bedeutet, dass alle Klassen implementieren müssen auch ausgesetzt werden, um Objective-C. Dies kann erfolgen entweder durch Vicki eine Unterklasse von NSObject:
Oder durch die Markierung der jeweils implementierten Methode als @objc:
Update: Apple Swift-Sprache-Dokumentation
Um für eine Art zu entsprechen, um ein Protokoll markiert
@objc
, dass der Typ muss auch gekennzeichnet mit@objc
oder die Methoden, die verwendet wird, um zu befriedigen, muss das Protokoll sein.Mit
@objc
auf eine Deklaration teilt dem compiler mit, setzt es die Objective-C runtime. Damit dies möglich ist, werden der Typ, der deklariert wurde@objc
muss in der Lage sein, um dargestellt werden, die in Objective-C.Für die Klassen bedeutet dies, Sie müssen die Erben von NSObject. Für Methoden, das heißt, Sie werden unterstützt durch dynamische Objective-C message passing.
Aussieht, wir müssen nur die Präfix-Protokoll-Methode mit
@objc
in der privaten Klasse.Warnung wird wahrscheinlich nicht steigen, für nicht-private-Klasse.
Beide sind in Ordnung.
Hinzufügen einer Erweiterung zum Protokoll Rücksendung von leeren Funktionen und default-Werte. Jede Klasse entspricht, der Protokoll und Wünsche zu überschreiben func-oder var kann Optional tun.
Sind die Prämien, die Sie nicht Erben, alle obj-c Gepäck.