Différence entre calculée de la propriété et les biens avec fermeture
Je suis nouveau sur Swift. Quelle est la différence entre une propriété calculée et un ensemble de propriétés pour une fermeture? Je sais une propriété calculée obtient recalculé à chaque fois. Est-ce différent pour la fermeture? c'est à dire
Fermeture:
var pushBehavior: UIPushBehavior = {
let lazilyCreatedPush = UIPushBehavior()
lazilyCreatedPush.setAngle(50, magnitude: 50)
return lazilyCreatedPush
}()
Calculés:
var pushBehavior: UIPushBehavior {
get{
let lazilyCreatedPush = UIPushBehavior()
lazilyCreatedPush.setAngle(50, magnitude: 50)
return lazilyCreatedPush
}
}
Vous devez vous connecter pour publier un commentaire.
La première est stockée la propriété est initialisée par l'intermédiaire d'une fermeture. La deuxième est une propriété calculée.
Stockées propriété d'initialisation de fermeture est appelé une fois et une seule fois, mais vous pouvez en modifier la valeur de la stockées propriété (sauf si vous remplacez
var
aveclet
). Ceci est utile quand vous voulez pour encapsuler le code pour initialiser un stockée dans la propriété d'un seul, concis bloc de code.La propriété calculée de blocage, cependant, est appelée à chaque fois que vous faites référence à la variable. C'est utile lorsque vous voulez le code pour être appelée à chaque fois que vous faites référence à la propriété calculée. Généralement, vous le faites quand la propriété calculée doit être recalculé à chaque fois que vous faites référence à la stockées propriété (par exemple, recalculé à partir d'autres, peut-être privé, stockées les propriétés).
Dans ce cas, vous avez sans doute envie de la stockées propriété (le premier exemple), et non pas la propriété calculée (deuxième exemple). Vous avez sans doute ne veux pas pousser le comportement de l'objet à chaque fois que vous faites référence à la variable.
Par la façon dont, dans votre premier exemple, vous en interne de référence, à être instancié paresseusement. Si vous voulez que le problème, vous devez utiliser le
lazy
mot-clé:Si, toutefois, la propriété est
static
, il est automatiquement instanciés paresseusement.La principale différence est que vous ne pouvez pas assigner quelque chose à la propriété calculée, car il n'a pas de setter. Dans ce cas, la fermeture est appelé une fois et la valeur de retour est stockée dans la variable, donc si le résultat ne change pas au fil du temps, il est plus efficace d'utiliser la variable stockée plutôt que de l'calculée.
En général: les propriétés calculées doit être utilisé uniquement si la valeur peut être récupéré rapidement.
Note: Si vous ne modifiez pas/réaffecter la variable stockée, vous devriez envisager de faire une constante (
let
)Fermeture :
La première fois lors de la pushBehavior variable appelée alors bloquer les exécuter et de valeur est enregistrée dans pushBehavior variable. après que chaque fois que vous appelez pushBehavior puis ces valeur sont retournés.
signifie seulement pour la première fois le bloc de code exécuté et enregistré dans cette variable.
Aussi, vous pouvez stocker la valeur de la variable à chaque fois que vous voulez, mais ensuite, la valeur de retour, mais si vous déclarez que "laisser", alors vous ne pouvez pas modifier cette valeur.
Propriété calculée :
En propriété calculée à chaque fois que vous avez appelé pushBehavior variable puis ce bloc de l'exécution et de la valeur de retour. donc, chaque fois que le bloc est exécuté.
et vous ne pouvez pas déclarer la variable comme "let" mot-clé pour pushBehavior variable.
De sorte que vous pouvez utiliser ce code selon vos besoins.
Ce n'est pas une réponse, mais c'est juste la peine de mentionner que, pour:
donc pour les deux calculée et paresseux variables, vous pouvez accéder à
self
ou stockées des propriétés avec des pas de soucis.