43

Xcode 9 Release Notes说支持 Swift 3 编译:

Swift 4 和 Swift 3、Swift 4 和 Swift 3 目标的一个编译器可以在同一个项目中一起编译。

我已经安装了 Xcode 9 测试版。但是当我按下 Build 时,它显示了一堆错误。在 Xcode 9 中使用 Swift 3 时需要做一些特殊的准备工作吗?

升级版: 使用 Swift 3.1 编译的模块无法在 Swift 4.0 中导入

使用 Swift 3.1 编译的模块无法在 Swift 4.0 中导入

4

5 回答 5

62

选择目标,转到Build Settings > Swift Language Version

在此处输入图像描述

于 2017-06-06T12:15:25.173 回答
11

以上所有答案都在回答错误的问题。使用 Xcode 9 时,您正在使用 Swift 4 编译器(即使您使用它来编译 Swift 3 代码)来修复此问题,请使用适当的编译器/Xcode 重新编译。

如果您尝试通过命令行执行此操作,则可以使用sudo xcode-select -switch在 xcode 版本之间切换。祝你好运!

于 2017-09-14T15:15:22.143 回答
4

Xcode 10.1 和 Swift 4.2 的更新

Swift 3、4 和 4.2 目标可以共存并链接在一起。

当对您的项目有意义时,您可以决定何时以及是否要基于每个目标进行迁移。虽然绝对鼓励迁移到 Swift 4.2,但这不是一个全有或全无的过程,因为 Swift 3、4 和 4.2 目标可以共存并链接在一起。

不同的cocoapod和不同的项目版本也可以共存。

与项目版本相比,您希望拥有不同的 cocoapod 版本,那么您应该在 pod 文件的末尾进行以下更改:

post_install do |installer|
    print "Setting the default SWIFT_VERSION to 4.2\n"
    installer.pods_project.build_configurations.each do |config|
        config.build_settings['SWIFT_VERSION'] = '4.2'
    end

    installer.pods_project.targets.each do |target|
        if ['SomeTarget-iOS', 'SomeTarget-watchOS'].include? "#{target}"
            print "Setting #{target}'s SWIFT_VERSION to 3.0\n"
            target.build_configurations.each do |config|
                config.build_settings['SWIFT_VERSION'] = '3.0'
            end
        else
            print "Setting #{target}'s SWIFT_VERSION to Undefined (Xcode will automatically resolve)\n"
            target.build_configurations.each do |config|
                config.build_settings.delete('SWIFT_VERSION')
            end
        end
    end
end

有时即使在您运行 pod update 您的 xcode 后,强制更新您的 cocoapod 的项目版本,然后在这种情况下选择 cocoapod pod 项目并在构建设置中更改 swift 版本。

于 2018-11-30T15:23:13.847 回答
3

我有同样的问题-(我安装了 Swift 版本为 3x 的 pod,而我的项目的 swift 版本是 Swift 4。所以我遇到了很多编译器错误。后来我将 Swift 版本从 4 更改为 3.2 并尝试构建项目,我又得到了编译器错误。我认为这是因为我在项目使用 Swift 4 时运行了 pod install。)

  • 首先,您需要从构建设置中更改“Swift 语言版本”。
  • 如果您安装了任何 pod,那么仅更改“Swift 语言版本”将无济于事。您可能需要为项目运行 pod install。
于 2017-10-25T13:18:21.647 回答
2

Xcode 9 需要使用 Swift 3.2 或更高版本构建的框架。转到https://github.com/emaloney/CleanroomLogger并单击下载 ZIP。在 Xcode 9 中打开 xcodeproj。按 ⌘B。CleanroomLogger.framework 从红色变为黑色。将框架拖到您的项目中。请参阅相关问题:Swift 3.1 的领域问题

建造它

于 2017-06-15T13:51:14.840 回答