从扩展中的另一个方法执行闭包 Swift

Execute closure from another method in an extension Swift

我有一个 class 是自定义模态视图的委托,因此它有一个方法用于模态被关闭的时间。我正在扩展 class 并且在扩展中我有一个接受完成闭包的方法。

我不能在 class 的主要实现或模态的实现中写 - 只能写扩展名。

我想在关闭模态时执行闭包,但我似乎无法自行解决。有可能吗?

这是我想做的事的一个例子:

extension MyClass {
    func method(completion: (Int) -> ()) {
        // showing the modal
    }
}

extension MyClass: ModalDelegate {
    func modalDismissed() {
        // here I want to execute the completion passed to method()
    }
}

将完成作为变量分配给method中的MyClass的属性并在modalDismissed中调用它:

class MyClass {
    var classCompletion: (() -> ())?
}

extension MyClass {
    func method(completion: @escaping () -> ()) {
        classCompletion = completion
    }
}

extension MyClass: ModalDelegate {
    func modalDismissed() {
        classCompletion?()
    }
}

更新:如果你不能"write in the main implementation of the class",这里有一个使用static属性的方法。这是一个 hack,有很多限制,但确实有效。否则,如果不写入主要实现,您将无能为力。

extension MyClass {
    static var classCompletion: (() -> ())?

    func method(completion: @escaping () -> ()) {
        MyClass.classCompletion = completion
    }
}

extension MyClass: ModalDelegate {
    func modalDismissed() {
        MyClass.classCompletion?()
    }
}