Cette fois, j'ai appris les différences dans les protocoles, les classes et les structures, donc je les afficherai.
Un protocole signifie littéralement quelque chose comme «convention», «protocole» ou «alliance». Dans le langage Swift, cela signifie "chaque promesse entre le développeur et le langage Swift".
Voyons d'abord comment écrire une déclaration.
qiita.rbvar
protocol <Nom du protocole> {
}
En gros, il est déclaré comme ça. La seule différence avec la classe est que le mot-clé "classe" est devenu "protocole". Creusons plus profondément.
À partir de là, la nette différence entre le protocole et la classe est que le protocole *** n'écrit pas le contenu de la méthode lors de l'écriture de la méthode. *** *** La méthode d'écriture est la suivante.
qiita.rbvar
protocol <Nom du protocole> {
func<Nom de la méthode>()
}
*** À première vue, le format est similaire à celui d'une classe, mais il n'y a pas de {} après le nom de la méthode ()! *** ***
Le fait que le protocole n'écrit pas le contenu de la méthode signifie qu'il n'est pas logique de simplement la déclarer.
Voyons comment l'utiliser. Fondamentalement, le protocole est utilisé comme un ensemble avec "classe".
qiita.rbvar
class <nom de la classe> <Nom du protocole> {
}
Écrivez le nom du protocole après le ":" dans la déclaration de classe. L'écriture dans laquelle le protocole participe à la classe de cette manière s'appelle *** ratification ***. Si vous avez ratifié un protocole, vous devez implémenter les méthodes définies dans ce protocole. S'il n'est pas implémenté, une erreur se produira.
Ensuite, regardons-le concrètement.
qiita.rbvar
protocol MorningProtocol {
func morningAction()
}
qiita.rbvar
class Date:MorningProtocol {
func morningAction(){
print("Prendre le petit déjeuner")
print("Brosse-toi les dents")
}
Dans ce qui précède, ce qu'il faut faire après le réveil le matin est affiché dans la zone de débogage. C'est l'utilisation la plus élémentaire du protocole
Le protocole a une fonction de type. Lors de la déclaration d'un nom de variable, si vous spécifiez le nom du protocole en ajoutant ":" après le nom de la variable, la variable sera une case dédiée à la classe qui ratifie le protocole.
qiita.rbvar
var <Nom de variable>:<Nom du protocole> = <nom de la classe> ()
La classe est interprétée comme un modèle. Les cours sont souvent utilisés comme exemple pour imaginer le moule utilisé pour fabriquer le taiyaki.
La déclaration de classe est la suivante.
qiita.rbvar
class <nom de la classe> ()
La méthode de déclaration est la suivante
qiita.rbvar
class <nom de la classe> {
func<Nom de la méthode>(){}
}
Ensuite, déclarons concrètement
qiita.rbvar
class Hamburger {
var nakami = "Petit pâté"
func sayNakami () {
print("Le contenu est"+nakami+"est") //Le contenu estパティest
}
Créons maintenant une classe en utilisant la classe créée ci-dessus.
qiita.rbvar
var hamburger = Hamburger()
hamburger.nakami = "Patty et fromage"
hamburger.sayNakami() //Le contenu est composé de galettes et de fromage.
Dans l'exemple ci-dessus, une instance est créée en fonction de la classe, et l'instance est exploitée et traitée. Cheese est ajouté à la valeur de la propriété nakami pour changer la chaîne.
En un mot, la différence entre les classes et les protocoles Une classe qui ne peut pas être héritée!
La méthode d'écriture de base est la suivante.
qiita.rbvar
nom de la structure struct{
nom de propriété var: type de propriété=formule
let nom de propriété: type de propriété=formule
}
Regardons un exemple concret ensuite
qiita.rbvar
struct SomeStruct {
var num1 = 246
let num2 = 135
}
let someStruct = SomeStruct()
let a = someStruct.num1 //246
let b = someStruct.num2 //135
Dans ce qui précède, j'ai écrit que la différence entre une classe et une structure est de savoir si elle peut être héritée ou non, mais regardons un exemple concret ici.
qiita.rbvar
//Structure(Type de valeur)
struct ColorStruct {
var color:String
}
//classe(Type de référence)
class ColorClass {
var color:String
init(color:String){
self.color = color
}
}
var colorStruct1 = ColorStruct(color: "Bleu")
var colorStruct2 = colorStruct1
colorStruct2.color = "noir"
println("colorStruct1:\(colorStruct1.color)、colorStruct2:\(colorStruct2.color)")
Pour la structure des résultats de sortie, colorStruct2.Changer de couleur ne change pas la couleurStruct1
"colorStruct1:Bleu, colorStruct1:noir"
var colorClass1 = ColorClass(color: "Bleu")
var colorClass2 = colorClass1
cardClass2.color = "noir"
println("colorClass1:\(colorClass1.color)、colorClass2:\(colorClass2.color)")
Pour la structure des résultats de sortie, colorClass2.Si vous changez la couleur, le colorClass1 changera également
"colorClass1:noir, colorClass2:noir"
Comme mentionné ci-dessus, on peut voir que les structures ne sont pas héritées et ont des concepts indépendants un par un.
Quand j'étudiais cette fois, la différence entre le protocole, la classe et la structure était souvent ... "Qu'est-ce que c'était?", Alors je l'ai résumé grossièrement!
Recommended Posts