转换为当前Swift语法失败 - "没有这样的模块"(Swift 4,Xcode 9)

Nik*_*iev 15 xcode ios swift swift4 xcode9

在Xcode 9中,我正在尝试自动转换为Swift 4.它失败并显示以下消息:

在此输入图像描述

转换为当前Swift语法失败
在尝试迁移之前,请确保使用当前配置的Swift版本成功构建所有选定目标.

它抱怨缺少模块.但是当我进行常规构建时,没有问题.不确定这是否相关,但模块(Xcode正在抱怨的模块)已经早先转换为Swift 4(在它自己的项目中).

注意:此处不使用Cocoapods/Carthage.

注意:两个解决方案尝试(并且有效),但没有解决潜在的问题.

  • 一种解决方案是手动进行转换(在构建设置中将Swift版本更改为4并逐个应用Fix-It,直到不再出现构建错误).
  • 另一种解决方案是禁用第三方框架(注释掉所有使用它的代码),执行自动迁移,然后重新启用框架.对于更大的项目,这可能会非常困难.

Luc*_*nzo 8

我找不到任何解决方案了.

现在我修复手动设置 Swift Language Version

在此输入图像描述

从3.2更改为4.0后,我手动编译并修复错误和警告.
我在等待更好的解决方案!


Pad*_*van 6

我将项目转换为Swift 4.0时也遇到了这个问题.当您尝试转换导入已在Swift 4.0中的框架的目标时,似乎出现问题.在您的屏幕截图中,您尝试转换' RecipeTextParser ',它导入已经是Swift 4.0的' SovaTools '.

我找到了肮脏但有效的解决方案.您可以在转换时使用旧版(Swift 3.2)版本的" SovaTools ".你应该检查它在转换工具的目标选择窗口标记.然后,当' RecipeTextParser '成功转换后,您可以再次使用Swift 4.0'SovaTools '版本.


小智 5

我遇到了这个错误,在我的情况下,我的Pod之一(一个Xcode抱怨)是一个Swift 4目标,其余的是Swift 3.2。查看构建日志,看起来Xcode在一个位置构建了该框架,然后在另一个位置进行了搜索。当我将Pod恢复为较旧的版本(使用Swift3.2)时,问题就消失了。显然是Xcode的错误。高温超导


Kru*_*nal 1

Xcode (Xcode 9) 语言迁移功能并不那么准确,它可以零容忍地将您的完整代码/项目从一个 swift 版本迁移到另一个版本。它为我们(开发人员)跳过了一些代码迁移。这可能是工具的错误或不准确。但您还需要付出一些手动努力,才能为您的项目/代码完全迁移 swift 语言版本。

现在,根据您的快照,Xcode 显示“RecipeTextParser”框架错误。我认为这是一个外部/第三方框架。另一点需要注意的是,您已经使用 CocoaPods 集成了该框架:

以下任一情况都可能导致代码迁移失败:

  1. CocoaPods 锁定框架(文件)以进行编辑。因此,语言迁移过程可能无法迁移(或识别)外部/第三方框架的代码。
  2. 一般来说,框架是代码文件的封装,因此框架本身可能不允许文件/源代码编辑。

建议作为解决方案:

  1. 更新您的 cocoa pod 以及使用与最新 swift 语言版本兼容的 cocoa pod 集成的所有框架。
  2. 如果您手动集成/添加了外部/第三方框架,那么您还需要更新/替换它们。

需要一些手动工作才能在 swift 语言之间完全迁移代码。我尝试使用上述选项进行快速迁移,我的所有项目现在都与 swift 4 兼容。