J'apprends Swift et je lis The Swift Programming Language
d'Apple, je n'ai pas de formation en Objective C (seulement PHP, JS et autres mais pas d'Obj C)
À la page 24-25, je vois ce code:
//...Class definition stuff...
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
//...Class continues...
Cette partie n'est PAS spécifiée dans le livre et je ne peux pas savoir à quoi cela sert.
Quelqu'un peut-il m'expliquer ce que sont les réglages et les réglages ?
Réponses:
C'est en fait expliqué juste avant le code:
Quand une autre classe veut obtenir cette variable de périmètre, elle le fait:
... qui appelle ceci:
Et donc c'est essentiellement comme si le contrôleur appelant faisait ceci:
Lorsque vous définissez la variable à partir d'un autre objet, cela ressemble à ceci:
Ce qui appelle le code dans le
set{}
bloc:Et c'est comme si la classe qui définit la variable avait fait ceci:
C'est vraiment juste pour la commodité - vous pouvez appeler cela à partir d'un autre code sans avoir à diviser ou multiplier par 3 tout le temps, car cela est fait juste avant de définir la variable et juste avant d'obtenir la variable.
Dans Swift, nous pouvons avoir des propriétés qui sont calculées une fois obtenues et peuvent faire quelque chose lorsqu'elles sont définies. Nous pourrions également le faire en Objective-C:
la source
L'obtention et la configuration des variables dans les classes se réfèrent soit à la récupération ("obtention"), soit à la modification ("réglage") de leur contenu.
Considérez une variable
members
d'une classefamily
. Naturellement, cette variable devrait être un entier, car une famille ne peut jamais se composer de deux points quelque chose de personnes.Donc, vous irez probablement de l'avant en définissant la
members
variable comme ceci:Ceci, cependant, donnera aux personnes utilisant cette classe la possibilité de fixer le nombre de membres de la famille à quelque chose comme 0 ou 1. Et comme il n'y a pas de famille de 1 ou 0, c'est assez malheureux.
C'est là que les getters et les setters entrent en jeu. De cette façon, vous pouvez décider vous-même comment les variables peuvent être modifiées et quelles valeurs elles peuvent recevoir, ainsi que décider du contenu qu'elles renvoient.
Revenant à notre classe familiale, assurons-nous que personne ne peut définir la
members
valeur à moins de 2:Maintenant , nous pouvons accéder à la
members
variable avant, en tapantinstanceOfFamily.members
, et grâce à la fonction setter, on peut également définir la valeur de comme avant, en tapant, par exemple:instanceOfFamily.members = 3
. Ce qui a changé, cependant, c'est le fait que nous ne pouvons plus définir cette variable sur une valeur inférieure à 2.Notez l'introduction de la
_members
variable, qui est la variable réelle pour stocker la valeur que nous avons définie via lamembers
fonction setter. L'originalmembers
est maintenant devenu une propriété calculée, ce qui signifie qu'il agit uniquement comme une interface pour traiter notre variable réelle.la source
members
==>count
,numberOfMembers
;var members : Set<Person>
??set (newVal) { ... }
, newVal est implicite, ilset { _members = newVal }
est donc également correct._members
devraient être privées, sinon la commandeinstanceOfFamily._members=1
serait définieinstanceOfFamily.members
sur une valeur inférieure à 2newValue
dans Swift 4 - docs.swift.org/swift-book/LanguageGuide/Properties.html#ID260Une question simple doit être suivie d'une réponse courte, simple et claire.
Lorsque nous obtenons une valeur de la propriété, elle déclenche sa
get{}
part.Lorsque nous définissons une valeur pour la propriété, il déclenche sa
set{}
partie.PS. Lors de la définition d'une valeur pour la propriété, SWIFT crée automatiquement une constante nommée "newValue" = une valeur que nous définissons. Après une constante "newValue" devient accessible dans la
set{}
partie de la propriété .Exemple:
la source
Tu devrais regarder propriétés calculées
Dans votre exemple de code,
perimeter
est une propriété non sauvegardée par une variable de classe, mais sa valeur est calculée à l'aide de laget
méthode et stockée via laset
méthode - généralement appelée getter et setter .Lorsque vous utilisez cette propriété comme ceci:
vous invoquez le code contenu dans le
get
bloc de code, et lorsque vous l'utilisez comme ceci:vous invoquez le code contenu dans le
set
bloc de code, oùnewValue
est automatiquement rempli avec la valeur fournie à droite de l'opérateur d'affectation.Les propriétés calculées peuvent être en lecture-écriture si un getter et un setter sont spécifiés, ou en lecture seule si le getter seul est spécifié.
la source
variable déclare et appelle comme ceci dans une classe
maintenant vous voulez programmer pour rendre la valeur par défaut de x supérieure ou égale à 3. Maintenant, prenez le cas hypothétique si x est inférieur à 3, votre programme échouera. Donc, vous voulez que les gens mettent 3 ou plus de 3. Swift vous a simplifié la tâche et il est important de comprendre cette façon peu avancée de dater la valeur de la variable car ils l'utiliseront largement dans le développement iOS. Voyons maintenant comment get et set seront utilisés ici.
si vous avez encore des doutes, rappelez-vous simplement que l'utilisation de get et set consiste à mettre à jour n'importe quelle variable de la manière dont nous voulons qu'elle soit mise à jour. get and set vous donnera un meilleur contrôle pour gouverner votre logique. Outil puissant donc pas facilement compréhensible.
la source