X不是Y的成员类型

Jee*_*eef 8 xcode swift

我在swift项目中遇到了模块名称间距的问题.

我在一个新项目中试过这个,一切正常:

我有2个模块,其中包含相同的类名,我可以Module.Class毫无问题地引用该类.

我有一个现有的快速项目,我无法让这个工作.我一直在收到错误

在此输入图像描述

因此,你可以看到我是否不尝试Module-Scope类,一切正常.

(是的,我已尝试过并且没有.Type添加).

所以我假设我的编译器设置中有一些东西.我唯一能想到的是我的LocationMessage类不是在主DataManager"类"文件中定义的,而是在不同的文件中定义的.

但我真的无法做出正面或反面的事情.有什么建议?

项目结构

框架:DataManager

  • DataManager.swift
  • LocationMessages.swift

框架:ReferenceTest

  • File.swift

所以我的问题是,File.swift我想引用定义一个类LocationMessages.swift里面DataManager.framework 的类IS公众

@objc(DMLocationMessage)
final public class LocationMessage : ParsedMessage {
Run Code Online (Sandbox Code Playgroud)

Ant*_*ton 20

swift编译器中也存在这个错误:不同文件中的SR-631扩展不能互相识别

编译的结果(成功/失败)取决于" 构建阶段">"编译源"设置中的文件顺序.

我有完全相同的错误消息:X不是Y的成员类型.通过重新安排编译源解决了这个问题.

  • 谢谢!这节省了我的夜晚 (2认同)
  • 如果您使用的是Swift`2.0`,`3.1`或`4.1`:将定义枚举的文件放在_Build Phase>编译Sources_设置的顶部。 (2认同)

Der*_*mas 11

如果有人在尝试构建和使用 xcframework 时在这里,显然,当您在框架中有一个与模块/框架同名的类时会导致问题。

这是一个已知问题,需要此处提到的解决方法。

PS - 我知道这本身并不能回答这个问题。只是把它留在这里给任何可能因为问题标题而降落在这里的人。


Alp*_*ana 8

如果使用xcframework,请按照以下步骤消除错误:

  1. 在终端中,转到 .xcframework 所在的文件夹。
  2. frameworkName替换为您的框架名称后,运行以下终端命令:

找 。-name "*.swiftinterface" -exec sed -i -e 's/frameworkName\.//g' {} \;

  1. 用上面命令生成的 xcframework 替换项目中的旧 xcframework。清洁构建项目。

上述错误仅发生在 xcframework 中,当类名与模块名相同时。有关 Apple 论坛的详细信息,请访问:https : //forums.developer.apple.com/thread/123253


flu*_*nic 6

class/struct/enum DataManager的代码中可能有一个隐藏DataManager模块的地方。该错误表明它找不到应LocationManager在何处读取模块的类型DataManager

您的应用程序模块的设计方式应使您无需除import语句外就显式使用模块的名称。因此,LocationMessage.Type无需说明模块即可直接使用。

这是我们所有应用程序模块都以开头的原因之一X,例如XDataManager。这样可以避免与Apple的模块,外部模块(例如CocoaPods的模块)和类型(例如您的情况)发生冲突。
X也很明显,这些模块是应用程序本身的一部分,而不是某些第三方框架。