2017-05-29 1 views
-1

J'ai une certaine confusion dans la propriété stockée paresseuse. J'ai lu de nombreux tutoriels et trouvé cela, mais je ne pouvais pas comprendre cela dans un scénario réel. Quelqu'un peut-il s'il vous plaît effacer à peu de choses,Propriété paresseuse stockée dans Swift

  1. Une propriété stockée paresseuse est une propriété dont la valeur initiale est pas calculée jusqu'à la première fois qu'il est utilisé ...

  2. Vous devez toujours déclarer un paresseux propriété en tant que variable (avec le mot-clé var), car sa valeur initiale ne peut être récupérée qu'après l'achèvement de l'initialisation de l'instance ...

  3. Les propriétés paresseuses sont utiles lorsque la valeur initiale d'une propriété dépend de facteurs externes dont les valeurs ne sont pas connus avant une instance initialisation s est terminée.

  4. Où devrions-nous utiliser des biens paresseux stockés

Merci

+2

Quel est le problème auquel vous êtes confronté avec des propriétés stockées paresseuses? Ces déclarations sont très claires dans leur signification. – PGDev

Répondre

2

Mike Buss a écrit un article sur l'initialisation paresseuse à Swift http://mikebuss.com/2014/06/22/lazy-initialization-swift/

Un exemple de quand utiliser l'initialisation paresseuse est lorsque le La valeur initiale d'une propriété n'est pas connue avant que l'objet ne soit initialisé ou lorsque le calcul de la propriété est com putativement coûteux.

Voici deux exemples pour les deux cas de la poste:

Dans le premier exemple, nous ne savons pas quelle valeur accueil personnalisé devrait avoir. Nous devons attendre que l'objet soit initialisé pour connaître le bon message pour cette personne.

class Person { 

var name: String 

lazy var personalizedGreeting: String = { 
    [unowned self] in 
    return "Hello, \(self.name)!" 
    }() 

init(name: String) { 
     self.name = name 
    } 
} 

Le deuxième exemple couvre le cas d'un calcul coûteux. Imaginez une classe MathHelper qui devrait vous donner des valeurs pour pi et d'autres constantes importantes. Vous n'avez pas besoin de calculer toutes les constantes si vous n'en utilisez qu'un sous-ensemble.

class MathHelper { 

lazy var pi: Double = { 
    // Calculate pi to a crazy number of digits 
    return resultOfCalculation 
    }() 

}