17

Swift 4.2 出来了,我在我的项目中使用ObjectMapper和其他一些 pod 时也收到了这个错误消息:

使用 Swift 4.1.2 编译的模块无法在 Swift 4.1.50 中导入

那么如何告诉 Xcode 开始更新我的项目并将其迁移到 Swift 4.2 呢?

4

5 回答 5

26

您没有使用正确的 swift 版本编译 Carthage 模块。所以你需要:

  1. 确保您的终端指向您的 Xcode 10 Beta 应用程序,而不是您的常规 Xcode:

sudo xcode-select -switch Xcode_beta_10.app

  1. 更新您的迦太基文件:

carthage update --platform iOS --no-use-binaries

  1. 在 Xcode 中回到你的项目,清理,构建
于 2018-07-18T18:35:50.380 回答
8

Swift 4.2中, Implicitly Unwrapped Optional (IUO)的实现发生了变化,根据swift 博客现在隐式展开可选 T!将被视为 T? with 和额外的标志让编译器知道它是一个隐式的 unwrap 可选。

IUO 的新思维模型是您需要考虑的模型!成为的同义词?此外,它在声明上添加了一个标志,让编译器知道声明的值可以被隐式解包。

由于此更改,可能存在一些源兼容性问题,可能需要您修改代码才能成功编译。

在 Swift 3 中,像 var a: Int? 这样的声明 将导致具有可选类型,以及像 var b: String! 这样的声明。将导致 b 具有 ImplicitlyUnwrappedOptional 类型。它在 Swift 4.2 中发生了变化,因此它显示了 Swift 4.2 附带的 Xcode 10 的ObjectMapper错误,并且为 Xcode 10 的 3.* 完成了类似的实现。

在 Objectmapper 库中,有一些函数声明在 swift 4.1 之前显示警告,现在在 swift 4.2 中显示为错误。有关 Xcode 9.4 和 swift 4.1 中的警告,请参阅下图

在此处输入图像描述

ObjectMapper GitHub repo上有一些拉取请求已解决了该问题,但他们正在等待新的 Xcode beta 版本,因为它正在使用最近被接受的编译器指令功能,并将与新的 Xcode beta 一起发布。

更新: 该问题在 ObjectMapper 3.3.0 版本中得到修复。

于 2018-06-10T18:21:11.703 回答
1

使用终端在您的项目目录中运行以下命令。它将更新您的 pod。希望它能解决你的问题。

pod update ObjectMapper
于 2018-09-24T05:18:42.813 回答
0

您需要在终端中切换 Xcode beta 版本。并在您的项目中删除旧版本的 Carthage 文档。更新迦太基 carthage update --platform iOS --no-use-binaries

于 2018-06-24T07:55:52.050 回答
-1

我对 Alamofire 也有同样的问题。

我的解决方法是

  1. 清理我的构建
  2. 转到File/Workspace Settings并确保您正在使用Legacy Build Systemfor Build System。然后问题就消失了。
于 2018-10-15T16:52:41.560 回答