我有一些代码看起来像这样:
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 的示例。
有没有人这样做过或知道接下来要尝试什么?或者有更好的方法吗?
附带说明一下,此代码的目标是有效地为 Calculator 类提供一种在值更改时通知 AnotherClass 的方法。我环顾四周,但不确定哪种技术最适合执行此操作。有什么建议吗?
最佳答案
我可以通过在 Playground 上摆弄来尽可能接近你想要的东西。我必须更改类型以匹配您传递给计算器的内容
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:闭包作为类变量中的初始参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33757443/