[SWIFT] Lassen Sie uns eine grobe Vorstellung von den Unterschieden zwischen Protokollen, Klassen und Strukturen bekommen!

Dieses Mal habe ich die Unterschiede in Protokollen, Klassen und Strukturen kennengelernt und werde sie ausgeben.

Was ist ein Protokoll?

Ein Protokoll bedeutet wörtlich so etwas wie "Konvention", "Protokoll" oder "Bund". In der Swift-Sprache bedeutet dies "jedes Versprechen zwischen dem Entwickler und der Swift-Sprache".

Lassen Sie uns zunächst sehen, wie Sie eine Erklärung schreiben.

qiita.rbvar


protocol <Protokollname> {
}

Grundsätzlich wird es so deklariert. Der einzige Unterschied zur Klasse besteht darin, dass das Schlüsselwort "Klasse" zu "Protokoll" geworden ist. Lassen Sie uns tiefer graben.

Methoden im Protokoll

Von hier aus besteht der klare Unterschied zwischen dem Protokoll und der Klasse darin, dass das *** -Protokoll den Inhalt der Methode beim Schreiben der Methode nicht schreibt. *** *** Die Schreibmethode ist wie folgt.

qiita.rbvar


protocol <Protokollname> {
     func<Methodenname>()
}

*** Auf den ersten Blick ähnelt das Format einer Klasse, aber nach dem Methodennamen () steht kein {}! *** ***

Verwendung des Protokolls

Die Tatsache, dass das Protokoll den Inhalt der Methode nicht schreibt, bedeutet, dass es nicht sinnvoll ist, sie nur zu deklarieren.

Lassen Sie uns näher darauf eingehen, wie man es benutzt. Grundsätzlich wird das Protokoll als Set mit "Klasse" verwendet.

qiita.rbvar


class <Name der Klasse> <Protokollname> {
 }

Schreiben Sie den Protokollnamen nach dem ":" in die Klassendeklaration. Das Schreiben, an dem das Protokoll auf diese Weise an der Klasse teilnimmt, wird als "Ratifizierung" bezeichnet. Wenn Sie ein Protokoll ratifiziert haben, müssen Sie die in diesem Protokoll definierten Methoden implementieren. Wenn es nicht implementiert ist, tritt ein Fehler auf.

Als nächstes schauen wir uns das konkret an.

qiita.rbvar


protocol MorningProtocol {
     func morningAction()
}

qiita.rbvar


class Date:MorningProtocol {
  func morningAction(){
  print("Frühstück essen")
  print("Putz dir die Zähne")
}

Oben wird ausgegeben, was nach dem Aufwachen am Morgen zu tun ist, in den Debug-Bereich ausgegeben. Dies ist die grundlegendste Verwendung des Protokolls

Protokoll als Typ

Das Protokoll hat eine Funktion als Typ. Wenn Sie beim Deklarieren eines Variablennamens den Protokollnamen durch Hinzufügen von ":" nach dem Variablennamen angeben, ist die Variable ein Feld für die Klasse, die das Protokoll ratifiziert.

qiita.rbvar


var <Variablennamen>:<Protokollname> = <Name der Klasse> ()

Was ist eine Klasse?

Die Klasse wird als Vorlage interpretiert. Klassen werden oft als Beispiel verwendet, um sich die Form vorzustellen, aus der Taiyaki hergestellt wird.

Die Klassendeklaration lautet wie folgt.

qiita.rbvar


class <Name der Klasse> ()

Erklärung der Methode in der Klasse

Die Deklarationsmethode lautet wie folgt

qiita.rbvar


class <Name der Klasse> {
  func<Methodenname>(){}

}

Als nächstes erklären wir konkret

qiita.rbvar


class Hamburger {
   var nakami = "Patty"

 func sayNakami () {
 print("Der Inhalt ist"+nakami+"ist") //Der Inhalt istパティist
}

Jetzt erstellen wir tatsächlich eine Klasse mit der oben erstellten Klasse.

qiita.rbvar


var hamburger = Hamburger()
hamburger.nakami = "Pastetchen und Käse"
hamburger.sayNakami() //Der Inhalt sind Pastetchen und Käse.

Im obigen Beispiel wird eine Instanz basierend auf der Klasse erstellt und die Instanz wird betrieben und verarbeitet. Dem Wert der Nakami-Eigenschaft wird Käse hinzugefügt, um die Zeichenfolge zu ändern.

Was ist eine Struktur?

Mit einem Wort, der Unterschied zwischen Klassen und Protokollen Eine Klasse, die nicht vererbt werden kann!

Die grundlegende Schreibmethode ist wie folgt.

qiita.rbvar


{
var Eigenschaftsname: Eigenschaftstyp=Formel
let Eigenschaftsname: Eigenschaftstyp=Formel
}

Schauen wir uns als nächstes ein konkretes Beispiel an

qiita.rbvar


struct SomeStruct {
   var num1 = 246
   let num2 = 135
}

let someStruct = SomeStruct()
let a = someStruct.num1 //246
let b = someStruct.num2 //135

Vertiefen Sie den Unterschied zwischen Struktur und Klasse

Oben habe ich geschrieben, dass der Unterschied zwischen einer Klasse und einer Struktur darin besteht, ob sie vererbt werden kann oder nicht, aber schauen wir uns hier ein konkretes Beispiel an.

qiita.rbvar


//Struktur(Werttyp)
struct ColorStruct {
    var color:String
}

//Klasse(Referenztyp)
class ColorClass {
    var color:String

    init(color:String){
        self.color = color
    }
}

var colorStruct1 = ColorStruct(color: "Blau")
var colorStruct2 = colorStruct1
colorStruct2.color = "schwarz"
println("colorStruct1:\(colorStruct1.color)、colorStruct2:\(colorStruct2.color)")

Für die Ausgabeergebnisstruktur colorStruct2.Durch Ändern der Farbe wird colorStruct1 nicht geändert
"colorStruct1:Blau, colorStruct1:schwarz"


var colorClass1 = ColorClass(color: "Blau")
var colorClass2 = colorClass1
cardClass2.color = "schwarz"
println("colorClass1:\(colorClass1.color)、colorClass2:\(colorClass2.color)")


Für die Ausgabeergebnisstruktur colorClass2.Wenn Sie die Farbe ändern, ändert sich auch die colorClass1
"colorClass1:schwarz, colorClass2:schwarz"

Wie oben erwähnt, ist ersichtlich, dass die Strukturen nicht vererbt werden und nacheinander unabhängige Konzepte haben.

Zusammenfassung

Als ich diesmal studierte, war der Unterschied zwischen dem Protokoll, der Klasse und der Struktur oft ... "Was war das?", Also fasste ich es grob zusammen!

Recommended Posts

Lassen Sie uns eine grobe Vorstellung von den Unterschieden zwischen Protokollen, Klassen und Strukturen bekommen!
Verstehe in 3 Minuten! Eine sehr grobe Erklärung des Unterschieds zwischen Sitzung und Cookie
Unterschied zwischen Vorwort und Postfix von Operatoren
Über die Idee anonymer Klassen in Java
Rails Logger Machen Sie sich in 1 Minute eine ungefähre Vorstellung
Fassen Sie die Unterschiede zwischen C # - und Java-Schrift zusammen
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
Gibt es Ende 2017 einen Leistungsunterschied zwischen Oracle JDK und OpenJDK?
Unterschiede zwischen Klassen und Instanzen in Ruby
Überprüfung der Beziehung zwischen dem Docker-Image und dem Container
Die Idee der schnellen Sortierung
Die Idee von jQuery
Ich möchte eine Liste des Inhalts einer Zip-Datei und ihrer unkomprimierten Größe erhalten
[Java] Wirf eine Anfrage und zeige den Bildschirm ② (GET / POST) an.
[Java] Wirf eine Anfrage und zeige den Bildschirm an (GET / POST)
Das n-te und n + 1-Zeichen einer Ruby-Zeichenfolge
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Denken Sie über die Unterschiede zwischen Funktionen und Methoden nach (in Java)
[jsoup] So erhalten Sie die gesamte Dokumentation
Der Unterschied zwischen der Programmierung mit Ruby-Klassen und der Programmierung ohne Ruby-Klassen
Unterschiede zwischen IndexOutOfBoundsException und ArrayIndexOutOfBoundsException
Versuchen Sie, die Idee eines zweidimensionalen Arrays mit einem eindimensionalen Array nachzuahmen
[Java] Verschiedene Zusammenfassungen an die Leiter von Klassen und Mitgliedern
[Rails] So erhalten Sie die URL der Übergangsquelle und leiten sie um
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
Rufen Sie in Spring Boot eine Proxy-Instanz der Komponente selbst ab
[Ruby] Beziehung zwischen Elternklasse und Kinderklasse. Beziehung zwischen Klasse und Instanz.
Java, JS (jQuery) und Ajax. Holen Sie sich einen bestimmten Wert von JSON.
Methode, um die Anzahl der Jahre zu addieren und das Monatsende zu erhalten
Was ist der Unterschied zwischen einem Webserver und einem Anwendungsserver?
Rufen Sie die öffentliche URL der privaten Datei von Flickr in Java ab
Holen Sie sich die Beschleunigung und Ausrichtung des Weltkoordinatensystems auf Android