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 中导入
以上所有答案都在回答错误的问题。使用 Xcode 9 时,您正在使用 Swift 4 编译器(即使您使用它来编译 Swift 3 代码)来修复此问题,请使用适当的编译器/Xcode 重新编译。
如果您尝试通过命令行执行此操作,则可以使用sudo xcode-select -switch
在 xcode 版本之间切换。祝你好运!
当对您的项目有意义时,您可以决定何时以及是否要基于每个目标进行迁移。虽然绝对鼓励迁移到 Swift 4.2,但这不是一个全有或全无的过程,因为 Swift 3、4 和 4.2 目标可以共存并链接在一起。
与项目版本相比,您希望拥有不同的 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 版本。
我有同样的问题-(我安装了 Swift 版本为 3x 的 pod,而我的项目的 swift 版本是 Swift 4。所以我遇到了很多编译器错误。后来我将 Swift 版本从 4 更改为 3.2 并尝试构建项目,我又得到了编译器错误。我认为这是因为我在项目使用 Swift 4 时运行了 pod install。)
Xcode 9 需要使用 Swift 3.2 或更高版本构建的框架。转到https://github.com/emaloney/CleanroomLogger并单击下载 ZIP。在 Xcode 9 中打开 xcodeproj。按 ⌘B。CleanroomLogger.framework 从红色变为黑色。将框架拖到您的项目中。请参阅相关问题:Swift 3.1 的领域问题