Dieses Mal habe ich die Unterschiede in Protokollen, Klassen und Strukturen kennengelernt und werde sie ausgeben.
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.
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 {}! *** ***
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
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> ()
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> ()
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.
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
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.
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