【发布时间】:2020-05-15 12:10:47
【问题描述】:
我喜欢defer,因为在复杂的多case场景下,我不能忘记在函数结束前调用completion。
但是当完成传递给另一个函数时,它不应该在第一个函数的 defer 中运行。
这是我通常做的:
func doSomething(completion: ()->()) {
/// Set this to false, before passing the completion to another function.
var runCompletionInDefer = true
defer {
if runCompletionInDefer { completion() }
}
runCompletionInDefer = false
doSomethingElse { completion() }
}
func doSomethingElse(completion: ()->()) {
completion()
}
有没有更好的解决方案?
使用这种方法,在将完成传递给另一个函数之前,您仍然必须记住:
runCompletionInDefer = false
【问题讨论】:
标签: swift deferred completionhandler