当前位置:  开发笔记 > IOS > 正文

您可以异步调度一个非转义的闭包函数吗?

如何解决《您可以异步调度一个非转义的闭包函数吗?》经验,为你挑选了1个好方法。

我对转义和非转义闭包之间的区别的简要了解:

函数返回,转义的闭包被调用。据我所知,这类似于在node.js中处理回调的方式-函数立即返回,它们异步执行,并且当闭包/完成块/时处理函数内部长时间运行的结果回调被调用。

非转义的闭包似乎是同步执行的,在该函数本身直到长时间运行的操作完成后才返回。

(我说对了吗?)

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

这是真的?可能?

您可以异步调度一个非转义的闭包函数吗?如果是这样,怎么办?

优点-我真的很想了解为什么同时存在转义和非转义的闭包:

是否存在实际的用例,用于异步调度非转义的闭包而不是转义的闭包?

在设计建议中,它建议函数编程受益于默认情况下的非转义(读取:同步?)。这是真的?为什么?

非转义的闭包和node.js中的promise是否有任何相似之处?

如果我在所有这些方面都不对,为什么不直接调用它@async而不是@escaping

Daniel Hall.. 5

我无法想到异步调度的函数如何不转义。提案中是否有具体说明建议?

关于您的其他问题:

是否存在实际的用例,用于异步调度非转义的闭包而不是转义的闭包?

这不可能,因此不会有用例:)

在设计建议中,它建议函数编程受益于默认情况下的非转义(读取:同步?)。这是真的?为什么?

该提案表示,减少重复的工作量(即必须将所有参数都标记为@noescape)将使函数式编程受益。由于函数式编程通常需要包含许多功能参数,而这些参数主要是不可转义的,因此此新的默认设置允许函数式算法具有更清晰,更整洁的签名,并减少了在@noescape各处的样板键入。

非转义的闭包和node.js中的promise是否有相似之处?

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

如果我对所有这些都不对,为什么不直接将其命名为@async而不是@escaping呢?

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



1> Daniel Hall..:

我无法想到异步调度的函数如何不转义。提案中是否有具体说明建议?

关于您的其他问题:

是否存在实际的用例,用于异步调度非转义的闭包而不是转义的闭包?

这不可能,因此不会有用例:)

在设计建议中,它建议函数编程受益于默认情况下的非转义(读取:同步?)。这是真的?为什么?

该提案表示,减少重复的工作量(即必须将所有参数都标记为@noescape)将使函数式编程受益。由于函数式编程通常需要包含许多功能参数,而这些参数主要是不可转义的,因此此新的默认设置允许函数式算法具有更清晰,更整洁的签名,并减少了在@noescape各处的样板键入。

非转义的闭包和node.js中的promise是否有相似之处?

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

如果我对所有这些都不对,为什么不直接将其命名为@async而不是@escaping呢?

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

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有