【问题标题】:How can I update swift from 3.1 to 3.2, but not to 4.0如何将 swift 从 3.1 更新到 3.2,但不能更新到 4.0
【发布时间】:2017-11-09 21:45:46
【问题描述】:

我已经检查了如何通过命令swift --version 查找当前 Swift 版本的问题,但是如何将我的 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”的错误 .

【问题讨论】:

  • Swift 3.2 未包含在 Xcode 8.3.3 中,因此您无法在 Xcode 8.3.3 中转换为 Swift 3.2。
  • 您是否尝试过清理构建文件夹?也许这不是转换的事情,而是 build 文件夹中的某些东西是用 Xcode 8 构建的。
  • 嗨,你能转换它吗?现在我的应用程序在 xcode 8(Swift 3) 中运行良好。在 xcode 9 中转换为 swift 4 之前,我应该将其转换为 swift 3.2 吗?那么我应该下载哪个 xcode 以将其转换为 swift 3.3?任何提示都会很有帮助
  • @PruthviHariharan 使用 XCode9.1 并确保 Command Line Tools 切换到 XCode9.1(9B55)Build Settings->Swift Language Version 指向 Swift 3.2。然后删除DerivedDataclean & build文件夹下的所有内容进行检查,然后修复XCode 9.1中显示的构建错误和警告。而已。之后的步骤将是更新以支持 swift4,但这可能需要更多时间。

标签: swift swift3 swift3.2 xcode9


【解决方案1】:

你可以试试这个:

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

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

注意:这些步骤使用 Xcode 9

【讨论】:

  • 我想我已经尝试过了。但不能像记住的那样工作。不过我可以稍后再试一次。
【解决方案2】:

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 中的更改。

Apple 在此处提供了更多信息:

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

(更新)

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

【讨论】:

  • 经过测试,我无法从 swift 3.1 转换为 3.2。好伤心。
【解决方案3】:

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

【讨论】:

  • 是的,我明白你的意思。我只是想知道我是否真的可以使用 swift 3.2 构建所有东西,然后我应该能够使用 Xcode 8 和 9 运行代码而无需重新构建这些代码。正确的?否则,通过频繁切换 Xcode8 和 9 来迁移和支持原始发布计划是很困难的。
【解决方案4】:

您不必转换它。

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

【讨论】:

  • 是的,但奇怪的是,如果我使用 Xcode 9 构建,它会显示“使用 Swift 3.1 编译的模块无法在 Swift 4.0 中导入”的错误
【解决方案5】:

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

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

【讨论】:

  • 你的意思是在 XCode9 中这样做吗?
  • 你的代码是swift 3.1,你想把它转换成3.2,所以打开xcode 8.2转换成3.2再打开xcode 9再转换成swift 4.0
  • 谢谢,但在 Xcode 9.0 正式版发布之前,我不会转换为 swift 4.0。
  • 我使用 Xcode 8.3.3 进行转换,但它只显示代码已经是 3.* 并且它不会更改文件。没有按我的预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多