有没有办法在不调用它的情况下使转义闭包无效?
Is there a way to nullify a escaping closure without calling it?
我正在寻找一种方法来使转义闭包无效而不调用它。
func should(completion: @escaping () -> Void) {
if something {
completion = nil
} else {
completion()
}
}
据我了解,转义闭包可以在should
函数完成后调用,它会一直存在直到被调用。
有没有办法在不调用它的情况下使闭包(和捕获的值)无效?
在你的例子中,闭包实际上没有转义,因为你没有将它分配给函数之外的任何东西,所以没有必要取消:
func should(completion: () -> Void) {
if !something {
completion()
}
}
但如果它正在转义,比如将其分配给 属性,那么您可以取消 属性 以释放它:
class Foo {
let fn: (() -> Void)?
func should(completion: @escaping () -> Void) {
fn = completion
}
func executeAndRelease() {
fn?()
fn = nil
}
}
我正在寻找一种方法来使转义闭包无效而不调用它。
func should(completion: @escaping () -> Void) {
if something {
completion = nil
} else {
completion()
}
}
据我了解,转义闭包可以在should
函数完成后调用,它会一直存在直到被调用。
有没有办法在不调用它的情况下使闭包(和捕获的值)无效?
在你的例子中,闭包实际上没有转义,因为你没有将它分配给函数之外的任何东西,所以没有必要取消:
func should(completion: () -> Void) {
if !something {
completion()
}
}
但如果它正在转义,比如将其分配给 属性,那么您可以取消 属性 以释放它:
class Foo {
let fn: (() -> Void)?
func should(completion: @escaping () -> Void) {
fn = completion
}
func executeAndRelease() {
fn?()
fn = nil
}
}