-1

我遇到了一些关于闭包/结构/捕获属性的问题。

我无法真正解释架构,但我需要这样的东西:

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.
}

是否有可能在类中定义的结构构造函数中的闭包中达到“自我”?

4

1 回答 1

0

在定义回调块时,您处于类的词法范围内,而不是类的实例。为了解决这个问题,您将不得不在实例方法的上下文中初始化您的回调。

我可能会尝试类似:

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.
}
于 2017-05-11T15:45:12.157 回答