Ich gehe das iOS-Tutorial von der Apple-Entwicklerseite durch .
Es scheint mir, dass protocol
und interface
fast die gleiche Funktionalität haben.
Gibt es Unterschiede zwischen den beiden?
die unterschiedliche Verwendung im Projekt?
Aktualisiert
Ja , ich habe den obigen Link gelesen und bin mir immer noch nicht sicher, was die Unterschiede und die Verwendung zwischen protocol
und sind interface
. Wenn ich eine solche Frage stelle, würde ich gerne eine einfache Erklärung zum Thema sehen. Manchmal kann es schwierig sein, alles aus der Dokumentation herauszuholen.
Antworten:
Im Wesentlichen sind Protokolle Java-Schnittstellen sehr ähnlich, mit Ausnahme von:
.
Dies sind die sofort offensichtlichen Unterschiede für einen Java-Entwickler (oder zumindest das, was ich bisher entdeckt habe).
quelle
default
Schlüsselwort versehen wird . Siehe das Oracle-Tutorial .Ergänzung der Antwort von @Thomas Schar. Die Magie des Swift-Protokolls kommt von der Erweiterung.
2) erhalten. Die Java 8-Schnittstelle kann Standardimplementierungen haben, kann jedoch nicht "rückwirkend" durchgeführt werden.
jeder Klasse oder Struktur "rückwirkend" Protokollanforderungen (und gegebenenfalls deren Implementierungen) hinzufügen .
in einigen Fällen "Blindheit der spitzen Klammern" vermeiden .
Eine Sache, die mich ein paar Stunden lang am Kopf kratzen ließ, ist, dass nicht alle Protokolle als Eigenschaftstypen verwendet werden können. Wenn Sie beispielsweise ein Protokoll mit Typealias haben, können Sie es nicht direkt als Eigenschaftstyp verwenden (es ist sinnvoll, wenn Sie darüber nachdenken, aber aus Java möchten wir wirklich eine Eigenschaft wie userDao: IDao haben).
quelle
required
vor einer Funktion in einem Protokoll verwenden, Sie bekommen nur'required' may only be used on 'init' declarations
...