gpt4 book ai didi

swift -3 : closure with escaping and non-escaping behaviour together

转载 作者:行者123 更新时间:2023-11-30 12:43:26 24 4
gpt4 key购买 nike

我遇到过一种情况,闭包可能在函数 f1 内部调用(闭包被传递到其中),或者可能会传递给其他函数 f2 >。

所以现在我想知道应该如何定义这个闭包的转义行为。我的意思是我应该放 @escaping 还是不放?

示例函数:

func f1(_ completionHandler: ()->()){
if someFlag == true{
completionHandler()
return
}
f2(completionHandler)
}

func f2(_ completionHandler: ()->()){
// some other magic
}

抱歉,如果有一些语法错误,(在此处键入方法),我的问题是,函数 f1 的completionHandler 的类型属性应该是什么?

最佳答案

何时需要@escaping的规则很简单 - 如果闭包函数参数可以转义函数调用的生命周期,那么它需要 被标记为 @escaping (否则编译器根本不会让你编译它)。

在您的示例代码中,completionHandler 未在 f2 中标记为 @escaping – 因此它无法逃脱 f2 的生命周期。因此它也不可能逃脱 f1 的生命周期,因此您不需要将 f1completionHandler 标记为 @escaping .

但是,如果 f2completionHandler 可以逃脱 f2 的生命周期,那么您必须将 f2f1 的参数标记为 @escaping,因为它可以转义两个调用的生命周期。

关于 swift -3 : closure with escaping and non-escaping behaviour together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41960447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com