我在swift项目中盯着模块名称间距问题。
我在一个新项目中试过这个,一切正常:
我有2个模块,其中包含相同的类名,我可以从Module.Class
引用该类没问题。
我有一个现有的快速项目,我无法让这个工作。我一直收到错误
因此,您可以看到我是否尝试 Module-Scope 该课程一切正常。
(是的,我已经尝试过.Type
添加了。
所以我假设我的编译器设置中有一些关闭。我唯一能想到的是我的LocationMessage类不在主DataManager"类"中定义。文件,而是在不同的文件中。
但我真的无法做出正面或反面的事情。有什么建议吗?
框架:DataManager
框架:ReferenceTest
所以我的问题在于File.swift
我尝试引用LocationMessages.swift
中DataManager.framework
内定义的类 IS public < / p>
@objc(DMLocationMessage)
final public class LocationMessage : ParsedMessage {
答案 0 :(得分:4)
您的代码中可能有class/struct/enum DataManager
隐藏DataManager
模块。该错误表明它无法在类型 LocationManager
中找到DataManager
,而应该在其中读取模块。
您的应用模块应该以某种方式设计,除了import
语句之外,您永远不需要显式使用模块的名称。所以直接使用LocationMessage.Type
而不说明模块。
这是所有我们的应用模块前缀为X
的一个原因,例如XDataManager
。这避免了与Apple的模块,外部模块(如来自CocoaPods)和类型(如您的情况)的冲突。
X
也明显表明这些模块是应用程序本身的一部分,而不是某些第三方框架。
答案 1 :(得分:3)
如果使用 xcframework ,请按照以下步骤摆脱错误:
查找。 -name“ * .swiftinterface” -exec sed -i -e 's / frameworkName \ .// g'{} \;
仅当xcframework命名的类与模块名称相同时,才发生上述错误。有关Apple论坛的详细信息,请访问:https://forums.developer.apple.com/thread/123253
答案 2 :(得分:1)
当使用依赖于另一个框架的 xcframework 时,.withAttributes(ActorAttributes.supervisionStrategy(Supervision.resumingDecider))
也会发生在它依赖于编写包装了扩展的扩展的框架上,例如委托方法
示例: Framework Foo依赖Bar,需要符合DataDelegate。
X is not a member of type Y
编译期间的所有操作都会按计划进行,并且将生成xcframework。将其与依赖框架Bar一起添加到您的应用程序并尝试对其进行构建后,您将获得class Foo {
...
}
extension Foo : Bar.DataDelegate {
...
}
。
答案 3 :(得分:0)
万一有人在尝试构建和使用xcframework时,显然,当您在框架中有一个与模块/框架同名的类时,就会引起问题。
这是一个已知问题,需要here所述的解决方法。
P.S。 -我知道这本身并不能回答这个问题。只是将其留在这里,以便任何可能因问题标题而落在这里的人。
答案 4 :(得分:0)
有一个解决方法! ?
你应该
/* import MyModule */ // NOT THIS!
import enum MyModule.Theme // This will only import the `enum`. You can use this method for `class`, `structs` and others too.
typealias
:typealias MyUniqueName = MyModule.Theme
这是编译器准确理解您的意思的唯一解决方法(无需更改内部模块名称。
记住最终文件将只包含两行:
import enum MyModule.Theme
typealias MyUniqueName = MyModule.Theme