在Xcode 9中,我正在尝试自动转换为Swift 4。 它失败并显示以下消息:
转换为当前Swift语法失败
在尝试迁移之前,请确保使用当前配置的Swift版本成功构建所有选定目标。
它抱怨缺少一个模块。但是当我进行常规构建时,没有问题。不确定这是否相关,但是模块(Xcode正在抱怨的模块)已经被转换为Swift 4(在它自己的项目中)。
注意:此处不使用Cocoapods / Carthage。
注意:两个解决方案尝试(并且有效),但没有解决潜在的问题。
答案 0 :(得分:8)
答案 1 :(得分:6)
将项目转换为Swift 4.0时,我也遇到了这个问题。当您尝试转换导入已在Swift 4.0中的框架的目标时,似乎出现问题。在您的屏幕截图中,您尝试转换' RecipeTextParser ',它导入已经是Swift 4.0的' SovaTools '。
我发现了肮脏但有效的解决方案。转换时,您可以使用旧的(Swift 3.2)版本的“ SovaTools ”。你应该不在转换工具的目标选择窗口中检查它的标记。然后,当' RecipeTextParser '成功转换后,您可以再次使用Swift 4.0' SovaTools '版本。
答案 2 :(得分:5)
我收到了这个错误,在我的情况下,我的一个Pod(一个Xcode抱怨)是一个Swift 4目标,其余的是Swift 3.2。看看构建日志,看起来Xcode在一个位置构建了该框架,并在另一个位置搜索它。当我将Pod恢复为旧版本(使用Swift3.2)时,问题就消失了。显然是一个Xcode错误。 HTH
答案 3 :(得分:1)
Xcode(Xcode 9)语言迁移功能并不准确,它可以将您的完整代码/项目从一个快速版本迁移到另一个零容忍的版本。它为我们(开发人员)跳过了很少的代码迁移。它可能是工具的错误或不准确。但是,您还需要进行一些手动操作,以完全迁移您的项目/代码的swift语言版本。
现在,根据您的快照,Xcode正在显示' RecipeTextParser'框架。我认为这是一个外部/第三方框架。还有一点需要注意,您已经使用CocoaPods集成了这个框架:
以下任何一种情况都可能导致代码迁移失败:
建议作为解决方案:
需要一些手动工作才能在swift语言之间完全迁移代码。我尝试使用上述选项快速迁移,我的所有项目现在都与swift 4兼容。
答案 4 :(得分:0)
只需更新您的Pod,它就能解决问题。
要更新广告连播,
这解决了我的问题。