Die Annahme und Konforme eine Klasse, Struktur oder Enumeration zu einem Swift-Protokoll

Jede der Haupttypen (Klassen, Strukturen und Aufzählungen) können Protokollen annehmen. Sie können ein Protokoll erstellen, die durch eine von ihnen angenommen wird, oder Sie können festlegen, dass es nur durch eine Klasse adoptable ist. Hier sind einige Beispiele von dem Grund Protokoll entspricht (MyProtocol

).

Konforme eine Klasse zu einem Protokoll

Viele der Protokolle in den Cocoa und Cocoa Touch-Frameworks verwendet werden, durch Klassen in den Rahmen teilweise angenommen, weil in den Ziel-# 8208-C, sind Protokolle der Regel nur mit Klassen verwendet. Sie werden in der Lage sein, über Klassen zu bewegen, aber, wenn Sie Code schreiben, die die Gerüste verwendet, werden Sie häufig Code zu schreiben, die für Klassen-Protokollen kompatibel ist.

Hier sind ein paar Richtlinien, um Klassen zu Protokollen entsprechen:

  • Sie geben an, dass eine Klasse ein Protokoll in seiner Erklärung nimmt, wie in der folgenden:

    class MyClass: MyProtocol {
  • Wenn Sie mehr als ein Protokoll annehmen, sie durch Kommas getrennt, wie in der folgenden:

    Klasse MyClass: MyProtocol, MyProtocol2 {
  • Wenn Ihre Klasse eine Unterklasse einer anderen Klasse ist, erscheint der übergeordneten Klasse zuerst in der Liste, wie in der folgenden:

    Klasse MyClass: MYSUPERCLASS, MyProtocol2

    Denken Sie daran, dass Swift keine Mehrfachvererbung nicht unterstützt, so gibt es nur eine Superklasse sein kann (oder keine). Sie können Protokolle in die Liste bei Bedarf hinzufügen.

Wenn Ihre Klasse eine Unterklasse von einer Klasse, die ein Protokoll annimmt, müssen Sie zu diesem Protokoll in Ihrer eigenen Klasse entsprechen, es sei denn bereits die Super ihm entspricht. Sie müssen nicht angeben, diese ererbte angenommen Protokoll in Ihrer eigenen Erklärung.

Nachdem darauf hingewiesen, dass die Klasse ein Protokoll verabschiedet, müssen Sie nun alle erforderlichen Eigenschaften und Methoden implementieren. (Es ist möglich, zu bedeuten, dass einige Methoden und Eigenschaften sind optional, aber die Standardeinstellung ist, dass sie alle sind erforderlich.)

Hier ist ein Beispiel einer Klasse, die einem Protokoll entspricht. Beachten Sie, dass myFunc wird durch das Protokoll erforderlich, wohingegen INTVAL ist eine Klasse-Eigenschaft, die nichts mit dem Protokoll zu tun hat:

class MyClass: MyProtocol {func myFunc () -> String {return "Protokoll 1"} var INTVAL: Int = 0}

Sie können eine Variable erstellen (mit var) Oder konstant (mit Lassen), Die eine Instanz der Klasse mit diesem Code enthält:

var myClass: MyClass = MyClass ()

Sie können dann die Klasse zugreifen INTVAL Instanzeigenschaft sowie die erforderlichen Verfahren Protokoll myFunc:

myClass.intVal = 25myClass.myFunc ()

An dieser Stelle machen Sie keinen Unterschied zwischen den Methoden und durch das Protokoll geforderten Eigenschaften und diejenigen, die einfach ein Teil der Klasse sind.

Konforme eine Struktur zu einem Protokoll

Eine Struktur (struct) Nimmt in gleicher Weise ein Protokoll wie eine Klasse - mit dem Code wie folgt aus:

struct MyStruct: MyProtocol {func myFunc () -> String {return "Protocol 2"} var INTVAL: Int = 0var One = 1VAR Zwei = 2}

Sie können eine Variable deklarieren, die die Struktur verwendet. Sie können dann die Mitglieder der Struktur zugreifen sowie die Funktion, die durch das Protokoll erforderlich ist:

var myStruct: MyStruct = MyStruct () myStruct.intVal = 15myStruct.myFunc ()

Konforme eine Aufzählung einem Protokoll

Aufzählungen folgen dem gleichen grundlegenden Design. Sie können eine Aufzählung deklarieren, die ein Protokoll neben den eigenen Daten, wie im folgenden Code verabschiedet:

Enum MyEnum: MyProtocol {func myFunc () -> String {return "Protokoll 3"} Fall Onecase Twocase Threecase Vier}

Verwenden Sie dann die Aufzählung mit einer Variablen im Code:

var MyEnum: MyEnum = MyEnum.TwomyEnum.myFunc ()

Dass sie alle zusammen

Die folgende Auflistung zeigt diese Proben zusammen.

// Spielplatz - Nomen: ein Ort, wo Menschen MyProtocol playprotocol kann {func myFunc () -> String} class MyClass: MyProtocol {func myFunc () -> String {return "Protokoll 1"} var INTVAL: Int = 0} var myClass : MyClass = MyClass () myClass.intVal = 25myClass.myFunc () struct MyStruct: MyProtocol {func myFunc () -> String {return "Protocol 2"} var INTVAL: Int = 0var One = 1VAR Zwei = 2} enum MyEnum: MyProtocol {func myFunc () -> String {return "Protokoll 3"} Fall Onecase Twocase Threecase Vier} var myStruct: MyStruct = MyStruct () myStruct.intVal = 15myStruct.myFunc (var MyEnum): MyEnum = MyEnum.TwomyEnum.myFunc ( )

Menü