编辑:
XCode 12 Beta5之后,会出现此问题。 Xcode不允许不同的模块定义相同的名称(可能适用于公共(public)类和协议(protocol))。 Alamofire和Kingfisher似乎同时定义了SessionDelegate。我仍在寻找解决方案。
我正在我们的应用程序中实现iOS 14小部件。我已经开始使用 XCode 12 Beta 2 ,一切都可以编译。当我将XCode更新为 XCode 12 Beta 6 时,我遇到以下错误:

我还附有错误的文件截图。
swift - XCode 12 :  'SessionDelegate'  has different definitions in different modules-LMLPHP
有什么方法可以将头文件编辑为Alamofire或Kingfisher的SessionDelegate具有不同的名称?有什么解决方法可以解决此问题?
到目前为止,我尝试了以下方法:

  • 我已经将Alamofire和Kingfisher更新到了最新版本
  • 我已经清理了 Podfile.lock 和所有Pod以及派生数据
  • 我尝试使用旧版构建系统进行编译
  • 最佳答案

    此时(Xcode 12.0或Xcode 12.2b2),唯一可能的解决方案是重命名Objective-C接口(interface)并避免冲突。这可以通过以下方法之一来完成:

  • 完全重命名冲突的类,更新所有使用该类的地方(例如,将 SessionDelegate 替换为 KingfisherSessionDelegate )
  • 向Swift类添加@objc(...)属性,这将更新生成的...-Swift.h文件中的Obj-C接口(interface),并避免名称冲突。

  • //  SessionDelegate.swift
    @objc(KFSessionDelegate)
    class SessionDelegate: NSObject { ... }
    
    //  Kingfisher-Swift.h
    @interface KFSessionDelegate : NSObject
    ...
    @end
    
    该解决方案已包含在Kingfisher 5.15.4 release中,并且可以应用于任何其他库和您自己的框架。
    另外,Apple论坛上的主题:https://developer.apple.com/forums/thread/658012

    关于swift - XCode 12 : 'SessionDelegate' has different definitions in different modules,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63614048/

    10-13 05:34