首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您能异步地分派一个非转义闭包函数吗?

您能异步地分派一个非转义闭包函数吗?
EN

Stack Overflow用户
提问于 2017-01-19 00:23:28
回答 1查看 527关注 0票数 2

我对逃逸和非逃逸闭包之间的区别的简要理解:

  • 转义闭包在函数返回后调用。据我所知,这类似于在node.js中处理回调的方式--函数立即返回,异步执行,在调用闭包/完成块/回调时处理函数内长期运行的操作的结果。
  • 非转义闭包似乎是同步执行的,其中函数本身在长时间运行的操作完成后才返回。

(我说得对吗?)

阅读从Swift 2的@noescape迁移到Swift 3的@escaping (在SE-0103中)的更改日志和理由,您似乎可以异步地分派不可转义的闭包。

这是真的吗?有可能吗?

可以异步地分派一个非转义闭包函数吗?如果是,怎么做?

加分-我真的很想了解为什么逃逸和非逃逸的闭包都存在:

  • 是否有一个实际的用例来异步地分配一个非转义闭包而不是一个转义闭包?
  • 在设计方案中,它建议函数式编程得益于非转义(读为:同步?)是默认的。这是真的吗?为什么?
  • 非转义闭包与node.js中的承诺有什么相似之处吗?
  • 如果这一切我都错了,为什么不叫它@async而不是@escaping呢?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-19 01:04:05

我无法想象异步分派的函数是如何不可转义的。该提案中是否有一项具体声明表明了这一点?

关于你的补充问题:

  • 是否有一个实际的用例来异步地分配一个非转义闭包而不是一个转义闭包?

这不应该是可能的,因此不会有它的用例:)

  • 在设计方案中,它建议函数式编程得益于非转义(读为:同步?)是默认的。这是真的吗?为什么?

该建议说,函数编程将受益于使用较少的样板(即必须将所有参数标记为@noescape)。由于函数式编程通常需要许多函数作为参数,而这些参数主要是不可逃避的,因此这种新的默认功能允许函数式算法具有更干净、不那么杂乱的签名,并且减少了到处键入@noescape样板的次数。

  • 非转义闭包和node.js中的承诺之间有什么相似之处吗?

不,承诺是异步的,将在Swift中使用转义闭包而不是非转义闭包来实现。

  • 如果这一切我都错了,为什么不叫它“异步”而不是“转义”呢?

因为它们不是完全相同的概念。转义闭包可以同步执行,但是保存起来,以便稍后执行。@async描述了执行的性质,但是@escaping只意味着闭包将在传递给返回的函数之后执行。当转义闭包确实执行时,它可能同步地或异步地执行。

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

https://stackoverflow.com/questions/41731762

复制
相关文章

相似问题

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