12

我已经检查了与如何通过命令查找当前 Swift 版本相关的问题swift --version,但是如何将我的 Swift 版本从 3.1 升级到 3.2?(因为 Xcode 9 只支持 Swift 4.0 & Swift 3.2)

要在 Xcode 8 和 Xcode 9 中成功构建,最好将 Swift 从 3.1 升级到 3.2。但是怎么做?

我的目标是确保在 Xcode 8 和 Xcode 9 中都成功构建,这样使用 Xcode 8 发布就可以了,并且尝试 Xcode 9 的功能也可以。所以在 Xcode 9.0 正式版发布之前,我不会将代码升级到 swift 4.0。

经过测试,我无法通过 Xcode 8.3.3 的“编辑->转换”功能将我的代码从 swift 3.1 转换为 3.2。

在此处输入图像描述

我尝试将代码转换为 Swift 3.2 的原因是,如果我使用 Xcode 9 构建代码,我将收到“使用 Swift 3.1 编译的模块无法在 Swift 4.0 中导入”的错误。

在此处输入图像描述

4

5 回答 5

7

你可以试试这个:

  • 构建设置 -> Swift 语言版本 -> Swift 3.2。

在此处输入图像描述

  • 编辑 -> 转换 -> 到当前的 Swift 语法。

注意:这些步骤使用 Xcode 9

于 2017-06-13T09:50:26.443 回答
6

Swift 3.2 是在 Xcode 9 下继续使用 Swift 3 代码而不将项目完全转换为 Swift 4 的权宜之计。

Xcode 8.3.3 中包含的 Swift 版本是 3.1。在 Xcode 9 下将您的代码转换为 Swift 3.2 并不能保证它仍然可以在 Xcode 8 下编译。

我不确定在 Xcode 9 下将 Swift 3.1 代码编译为 Swift 3.2 是否需要任何转换,因为它们都共享相同的语法。您可能必须修复一些 API 调用以补偿新 SDK 中的更改。

苹果在这里有更多信息:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Compatibility.html

(更新)

关于你的最后一张图片,如果你有 Runes 模块的源代码,你必须在 Xcode 9 下重新编译它。这将使用 Swift 3.2 并允许它在 Swift 4 中导入。

于 2017-06-08T09:26:46.243 回答
2

swift 中的依赖模块/框架必须使用 xcode9 重新编译,因为 swift 不是ABI 兼容/稳定的。如果您使用 carthage 或 cocoa pods 等包分发系统包含依赖项,则这些模块将使用 xcode9 重新编译,您应该不会看到此问题。如果您要链接以二进制格式分发的包,那么您可能会遇到问题

于 2017-06-09T14:13:48.743 回答
1

您不必转换它。

Swift 3.2 不是实际版本。这就是 Xcode 9(和 Swift 4 编译器)调用 Swift 3 的方式。(我想与使用 Xcode 8 构建的 Swift 3 有所区别)。

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Compatibility.html

于 2017-06-08T12:00:31.297 回答
0

从选项菜单:编辑 -> 转换 -> 到当前的 Swift 语法

以上步骤可帮助您转换为当前的 swift 语法。

于 2017-06-08T09:10:24.267 回答