【问题标题】:Swift3 Linux vc Mac DispatchQueueSwift3 Linux vc Mac DispatchQueue
【发布时间】:2016-06-20 17:03:53
【问题描述】:

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

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

【问题讨论】:

标签: linux swift swift3


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    感谢Brad Larson 在源代码中找到FoundationDispatch 覆盖。根据 swift.org:

    SDK 覆盖:特定于 Apple 平台,SDK 覆盖 (在 stdlib/public/SDK 中实现)提供 Swift 特定的添加 并对现有的 Objective-C 框架进行修改以改进其 映射到 Swift。特别是,基金会覆盖提供 额外支持与 Objective-C 代码的互操作性。

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

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

    【讨论】:

      【解决方案3】:

      查看Swift 3 Evolution Github page。它们列出了对语言的所有建议更改,并将它们按已实施和未实施的更改分开。提案 SE-0088:为 Swift 3 命名现代化 libdispatch 与许多其他更改一样,都在“尚未实施的列表”中。

      就数据和日期而言,我不能说,因为我相信这是即将到来的核心库的一部分,而且我还没有能够非常详细地查看它们。也许您也可以查看Swift Core-Libs Github 页面,虽然状态页面引用了在 NSData 和 NSDate 上完成的工作,但没有提及较新的数据类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        • 2019-09-22
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 2018-03-16
        • 1970-01-01
        相关资源
        最近更新 更多