我在闭包/结构/捕获属性方面遇到了一些问题。
我真的无法解释架构,但我需要这样的东西:
class ControllerAAA {
struct Events {
var userDidSelect(_ controller: Controller) -> ()?
}
}
class ControllerBBB {
var foo: Foo
var events: ControllerAAA.Events(userDidSelect: {
(controller: Controller) -> ()? in
// Here i need foo. Self mean the Block not the Controller
})
// Then i will passed events when i call ControllerAAA and ControllerAAA will use events.userDidSelect(...) when he is done.
}
是否有可能在类中定义的结构构造函数中的闭包中达到"self"?
在定义回调块时,您处于类的词法范围内,而不是类的实例。 要解决此问题,您必须在实例方法的上下文中初始化回调。
我可能会尝试这样的事情:
enum ControllerAEvent {
case userDidSelect((_ controller: Controller) -> ())
}
class ControllerBBB {
var foo: String
var events: ControllerAEvent
init() {
events = .userDidSelect({
(controller: Controller) -> () in
Print(self.foo)
})
}
// Then i will passed events when i call ControllerAAA and ControllerAAA will use events.userDidSelect(...) when he is done.
}