我的一个名为Foo
的Swift文件中有一个枚举。
其中一个名为NameA
的Cocoapods也具有相同的枚举名称Foo
(public enum
,不在任何类中)。
该模块还有一个与其框架NameA
同名的类。
如果我尝试在Foo
模块中引用NameA
,请执行以下操作:
NameA.Foo
它不起作用,因为编译器认为我引用的是类NameA
,而不是模块NameA
。
这里发布的解决方法对我来说不适用Swift namespace conflict
这似乎是swift中报告的错误: https://bugs.swift.org/browse/SR-898
答案 0 :(得分:2)
Don import NameA
。
相反,import enum NameA.Foo
(注意关键字"枚举",也可用于" struct"或" class"或& #34; FUNC&#34)
引用Foo
(您的枚举)或NameA.Foo
(他们的枚举)。
如果您需要在与NameA
相同的文件中引用NameA.Foo
:
import NameA
typealias NameAWrapper = NameA
NameA
作为NameAWrapper
,而无需直接导入模块。这是受此解决方法(您链接到的)的启发,但根据您的具体情况略有修改:https://stackoverflow.com/a/26774102/358806
答案 1 :(得分:0)
我最近遇到了类似的问题。你不会喜欢我找到的解决方案,但无论如何我都会分享它。我不得不分叉我正在使用的吊舱并将其重命名为新的东西。新项目名称不再与类名冲突,我可以将其命名为MyForkedName.ClassName
。这实际上是一种不方便的方法,但在我们的情况下,它是一个较旧的库,在一段时间内没有改变(我们将来会完全删除)所以我愿意立即解决。
答案 2 :(得分:0)
如果要使用Cocoapods等其他模块中的枚举或某些框架,则必须使用此方法,
假设我在项目中定义了枚举Result,而在其他模块中定义了同样的结果。您要在同一个文件中同时使用两个枚举-
import enum MyFramework.Result
func doSomething(callback: (Result<Data>) -> Void) {
}
func doSomething1(callback: (MyFramework.Result<Data>) -> Void) {
}