2
我試圖使用@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!
}
}
}
請告訴我有一個更好的方式來做到這一點...
謝謝!我編輯了我的解決方案代碼以更加準確,但我更讚賞您的解決方案! – Erik
@SiLo沒問題!是的,「@懶惰」應該是推薦的方式:] – Jack