Swift3 Linux vc Mac DispatchQueue

sle*_*ans 11 linux swift swift3

根据swift.org/migration-guide,调度和相关功能有一个很好的新swift接口(例如dispatch_async- > DispatchQueue.async).还添加了其他基础类型DataDate值类型而不是NSDataNSDate.

但是,在linux,ubuntu15.10上的swift3(开发人员预览版1)的开源版本中,编译器拒绝所有这些更改.事实上,在github上查看swift和swift-corelibs的开源版本,我实际上并没有看到任何这些变化.由于它将在XCode开发人员预览版上进行编译,这使我相信:我在Linux上做错了或者这些更改是在Apple分支而不是开源分支中进行的.任何人都可以验证这一点,如果是后者,如果是这样,我们如何知道Apple分支与开源分支的变化?

Max*_*tov 12

从Swift 3.0发布版本开始,GCD在Linux上可以很简单地使用import Dispatch,这有点令人困惑,因为iOS/macOS上不需要它Dispatch,默认情况下导入模块.


sle*_*ans 3

感谢Brad Larson在源代码中找到了FoundationDispatch叠加层。据 swift.org 报道:

SDK 覆盖:特定于 Apple 平台,SDK 覆盖(在 stdlib/public/SDK 中实现)为现有 Objective-C 框架提供了 Swift 特定的添加和修改,以改进它们到 Swift 的映射。特别是,Foundation 覆盖层为与 Objective-C 代码的互操作性提供了额外的支持。

tl;dr 这些文件夹中的任何内容都仅限 Apple 平台。仍然不确定为什么他们将 Dispatch 覆盖限制在 Apple 平台上,因为libdispatch它也是开源的并且针对 Linux,但这回答了我最初的问题。

编辑:能够通过快速邮件列表确认调度覆盖确实对 Objective-C 运行时有一定的依赖。有工作可以让它们在非达尔文平台上实现,但不能保证时间。