我有一些代码是这样的:

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/

10-09 00:08