gpt4 book ai didi

ios - 带有初始化器的惰性属性

转载 作者:可可西里 更新时间:2023-11-01 01:06:54 24 4
gpt4 key购买 nike

我正在尝试使用 @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
}

有没有办法将成员变量注入(inject)到延迟加载的属性中?

这是我相当烦人的解决方法:

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!
}
}
}

请告诉我有更好的方法来完成这个...

最佳答案

下面的代码为我编译(你的代码一定是在 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)

关于ios - 带有初始化器的惰性属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24072565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com