从扩展中的另一个方法执行闭包 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?()
}
}
我有一个 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?()
}
}