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

Sah*_*oor 17 ios cocoapods carthage xcode10 swift4.1.5

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

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

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

Ed.*_*Ed. 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中的项目,清理,构建


Suh*_*til 8

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

IUO的新心理模型是您考虑的一个!成为?的同义词?另外,它在声明中添加了一个标志,让编译器知道声明的值可以隐式解包.

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

在Swift 3中,声明如var a:Int?会导致类型为Optional,并且声明类似var b:String!会导致b具有ImplicitlyUnwrappedOptional类型.它在Swift 4.2中发生了变化,因此它显示了针对Xcode 10的ObjectMapper的错误,它带有swift 4.2,类似的实现是针对Xcode 10的3.*进行的.

在Objectmapper库中有一些函数声明,它们先前为swift 4.1显示了警告,现在显示为swift 4.2的错误.请参阅下图,了解Xcode 9.4和swift 4.1中的警告

在此输入图像描述

ObjectMapper GitHub repo 上有一些pull请求修复了这个问题,但他们正在等待新的Xcode beta版本的讨论,因为它正在使用最近接受的编译器指令功能将与新的Xcode beta一起发布.

更新: 问题是在ObjectMapper 3.3.0版本中修复.