我有一些代码是这样的:
class Calculator {
private let estimateChanged:(newEstimate:Double) -> Void
init(_ estimateChanged:(newEstimate:Double) -> Void) {
self.estimateChanged = estimateChanged
}
}
被另一个类使用。当前我正在尝试设置一个包含计算器的属性:
class AnotherClass {
private lazy var calculator = Calculator({ [unowned self] in
self.loadEstimate()
})
func loadEstimate() {}
}
我也有错误。首先它说的是给我一个错误:
[unowned self]
其次,我得到:
'unowned' cannot be applied to non-class type 'AnotherClass -> () -> AnotherClass'
我读到的所有东西都告诉我我是对的,但是我还没有看到用一个以闭包作为init参数的类的实例设置var的例子。
有人做过这个或者知道下一步该怎么做吗?还是有更好的办法?
顺便说一句,这段代码的目标是有效地为Calculator类提供一种方法,以便在值发生更改时通知另一个类。我环顾四周,但我不确定什么技术最适合这样做。有什么建议吗?
最佳答案
这是我在操场上摆弄能得到你想要的东西的最接近的地方。我必须改变类型以匹配您传递给计算器的内容
class Calculator {
private let estimateChanged:() -> Void
init(_ estimateChanged:() -> Void) {
self.estimateChanged = estimateChanged
}
}
class AnotherClass {
lazy var callback: () -> Void = { [unowned self] in
self.loadEstimate()
}
var calculator: Calculator?
// viewDidLoad in the case of a view controller
init() {
calculator = Calculator(callback)
}
func loadEstimate() {}
}
这显然不是你想要的,但它可以编译。试图在未初始化的对象中引用self时似乎存在问题(即使您似乎能够这样做,因为您指定了lazy和weak或unowned等)
关于swift - Swift:将闭包作为类变量中的init参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33757443/