首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >斯威夫特-3:与逃逸和非逃逸行为合二为一

斯威夫特-3:与逃逸和非逃逸行为合二为一
EN

Stack Overflow用户
提问于 2017-01-31 06:46:41
回答 1查看 143关注 0票数 0

我遇到了一种情况,即可以在函数f1中调用闭包(其中将闭包传递给),或者将闭包传递给其他函数f2

所以,现在我想知道该如何定义这种封闭的逃避行为。我是说我应该放不放@escaping

样本功能:

代码语言:javascript
运行
AI代码解释
复制
func f1(_ completionHandler: ()->()){
    if someFlag == true{
        completionHandler()
        return
    }
    f2(completionHandler)
}

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

对不起,如果有一些语法错误,(在这里输入方法),我的问题是,函数completionHandler的f1类型属性应该是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-31 07:26:45

当您需要@escaping时,规则很简单--如果闭包函数参数可以转义函数调用的生存期,则需要将其标记为@escaping (编译器根本不允许编译它)。

在示例代码中,completionHandlerf2中没有标记为@escaping,因此不能逃避f2的生存期。因此,它也不可能逃脱f1的生命周期,因此您不需要将f1completionHandler标记为@escaping

然而,如果f2completionHandler可以逃脱f2的生存期,那么您就必须将f2f1的参数标记为@escaping,因为它可以避免两个调用的生存期。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41960447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档