J'essaie d'utiliser l'attribut @lazy
pour charger une propriété à la demande, mais j'ai besoin de transmettre une variable membre dans l'initialiseur de l'instance paresseuse.Propriétés paresseuses avec initialiseurs
Voici l'exemple
class Worker
{
init(AnyObject context) { ... }
}
class Hive
{
let context : AnyObject
init(AnyObject context)
{
self.context = context
}
@lazy var worker = Worker(self.context) // This does not work
}
est-il pas possible d'injecter des variables membres dans des propriétés chargées paresseux?
Voici ma solution de contournement plutôt ennuyeux:
class Hive
{
// initializer and context constant elided
let lazy = Lazy()
class Lazy
{
var worker : Worker? = nil
var token : dispatch_once_t = 0
}
var worker : Worker
{
get
{
dispatch_once(&lazy.token) { self.lazy.worker = Worker(self.context) }
return lazy.worker!
}
}
}
S'il vous plaît me dire qu'il ya une meilleure façon d'y parvenir ...
Merci beaucoup! J'ai modifié mon code de contournement pour être plus précis, mais j'apprécie beaucoup plus votre solution! – Erik
@SiLo Pas de problème! Et oui, le '@ paresseux devrait être la manière recommandée pour ceci:] – Jack