我有一些看起来像这样的代码:
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'
其次,self.loadEstimate()
我得到:value of type 'AnotherClass -> () -> AnotherClass' has no member 'loadEstimate'
我读过的所有内容都向我表明我已经做到了这一点,但是我还没有看到用类的实例设置var的任何示例,该类的实例将闭包作为init参数。
是否有人这样做或不知道下一步该怎么做?还是有更好的方法来做到这一点?
附带说明,此代码的目标是有效提供一种方法,使Calculator类在值更改时通知AnotherClass。我环顾四周,但不确定哪种技术最适合执行此操作。有什么建议?
通过在操场上闲逛,这与我想要的就近了。我必须更改类型以匹配您传递给计算器的内容
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或unown等)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句