[SWIFT] Ayons une idée approximative des différences entre protocoles, classes et structures!

Cette fois, j'ai appris les différences dans les protocoles, les classes et les structures, donc je les afficherai.

Qu'est-ce qu'un protocole?

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.

Méthodes dans le protocole

À 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 ()! *** ***

Comment utiliser le protocole

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

Protocole comme type

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> ()

Qu'est-ce qu'une 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> ()

Déclaration de méthode en 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.

Qu'est-ce qu'une structure?

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

Approfondir la différence entre structure et classe

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.

Sommaire

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

Ayons une idée approximative des différences entre protocoles, classes et structures!
Comprenez en 3 minutes! Une explication très approximative de la différence entre session et cookie
Différence entre la préface et le suffixe des opérateurs
À propos de l'idée des classes anonymes en Java
Enregistreur de rails Obtenez une idée approximative en 1 minute
Résumer les différences entre l'écriture C # et Java
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
Existe-t-il une différence de performances entre Oracle JDK et OpenJDK à la fin de 2017?
Différences entre les classes et les instances dans Ruby
Vérification de la relation entre l'image Docker et le conteneur
L'idée du tri rapide
L'idée de jQuery
Je veux obtenir une liste du contenu d'un fichier zip et sa taille non compressée
[Java] Lancer une requête et afficher l'écran ② (GET / POST)
[Java] Lancer une requête et afficher l'écran (GET / POST)
Le nième et le n + 1er caractères d'une chaîne Ruby
J'ai essayé JAX-RS et pris note de la procédure
Pensez aux différences entre les fonctions et les méthodes (en Java)
[jsoup] Comment obtenir la totalité de la documentation
La différence entre la programmation qui utilise des classes Ruby et la programmation qui n'utilise pas
Différences entre IndexOutOfBoundsException et ArrayIndexOutOfBoundsException
Essayez d'imiter l'idée d'un tableau à deux dimensions avec un tableau à une dimension
[Java] Divers résumés joints aux chefs de classe et aux membres
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
Obtenez une instance proxy du composant lui-même dans Spring Boot
[Ruby] Relation entre la classe parent et la classe enfant. Relation entre classe et instance.
Java, JS (jQuery) et Ajax. Obtenez une valeur spécifique de JSON.
Méthode pour additionner le nombre d'années et obtenir la fin du mois
Quelle est la différence entre un serveur Web et un serveur d'applications?
Obtenez l'URL publique du fichier privé de Flickr en Java
Obtenez l'accélération et l'orientation du système de coordonnées mondial sur Android