首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迅速逃逸

迅速逃逸
EN

Stack Overflow用户
提问于 2017-08-17 16:26:47
回答 2查看 99关注 0票数 0

我读过很多关于堆叠溢出的资料,但我就是想不出这一条:

几个小时以来,我一直是来自在线源代码的这一行代码,我只是不知道传递给函数的闭包为什么要转义,下面是代码:

代码语言:javascript
复制
func composeFunction(functionA: @escaping (Int) -> String, functionB:  @escaping (String) -> String) -> ((Int) -> String) { 

    return {

        number in 

        functionB(functionA(number))
    }
}

从苹果的文档中,当: 1)运行在后台线程上的异步操作,2)闭包与其作用域以外的属性交互(使用self)时,闭包正在转义。

但我不认为这些发生,许多帮助将得到感谢!

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-17 16:29:00

代码语言:javascript
复制
{
    number in 
    functionB(functionA(number))
}

是个了结。返回它会导致functionBfunctionA都转义,因为在何时调用或释放这个闭包变得未知。

这与return functionB(functionA(number))不同,后者导致对这两个函数的立即调用,并使它们永远不会脱离composeFunction上下文。

票数 1
EN

Stack Overflow用户

发布于 2017-08-17 16:44:52

func composeFunction返回一个((Int) -> (String)),这正是一个闭包。当然,现在这意味着functionA和functionB将转义,因为我们不知道何时何地会调用这个闭包。此外,这是因为它需要知道是否应该保持对传入/正在操作的对象的引用。例如,如果所有闭包参数都有(() -> Void),并且还返回了(() -> Void),那么它就不需要转义了。

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

https://stackoverflow.com/questions/45740475

复制
相关文章

相似问题

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