我正在尝试使用@lazy
属性按需加载属性,但我需要将成员变量传递给延迟加载的实例的初始化程序。
以下是
的例子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
}
是否无法将成员变量注入延迟加载的属性?
这是我讨厌的解决方法:
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!
}
}
}
请告诉我有更好的方法来实现这一目标......
答案 0 :(得分:3)
以下代码为我编译(您的代码必须在XCode之外输入,因为语法已关闭)
class Worker
{
init(context : AnyObject) { }
}
class Hive
{
var context : AnyObject
init(context : AnyObject)
{
self.context = context
}
@lazy var worker : Worker = {
let instance = Worker(context: self.context)
return instance;
}()
}
它也可以在没有封闭的情况下工作:
@lazy var worker : Worker = Worker(context: self.context)