Swift 4.2 出来了,我在我的项目中使用ObjectMapper
和其他一些 pod 时也收到了这个错误消息:
使用 Swift 4.1.2 编译的模块无法在 Swift 4.1.50 中导入
那么如何告诉 Xcode 开始更新我的项目并将其迁移到 Swift 4.2 呢?
Swift 4.2 出来了,我在我的项目中使用ObjectMapper
和其他一些 pod 时也收到了这个错误消息:
使用 Swift 4.1.2 编译的模块无法在 Swift 4.1.50 中导入
那么如何告诉 Xcode 开始更新我的项目并将其迁移到 Swift 4.2 呢?
您没有使用正确的 swift 版本编译 Carthage 模块。所以你需要:
sudo xcode-select -switch Xcode_beta_10.app
carthage update --platform iOS --no-use-binaries
在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 版本中得到修复。
使用终端在您的项目目录中运行以下命令。它将更新您的 pod。希望它能解决你的问题。
pod update ObjectMapper
您需要在终端中切换 Xcode beta 版本。并在您的项目中删除旧版本的 Carthage 文档。更新迦太基 carthage update --platform iOS --no-use-binaries
。
我对 Alamofire 也有同样的问题。
我的解决方法是
File/Workspace Settings
并确保您正在使用Legacy Build System
for Build System
。然后问题就消失了。