命名空间与可可pod模块一起快速冲突

时间:2016-09-26 19:15:00

标签: ios swift cocoapods

我的一个名为Foo的Swift文件中有一个枚举。 其中一个名为NameA的Cocoapods也具有相同的枚举名称Foopublic enum,不在任何类中)。 该模块还有一个与其框架NameA同名的类。

如果我尝试在Foo模块中引用NameA,请执行以下操作:

NameA.Foo

它不起作用,因为编译器认为我引用的是类NameA,而不是模块NameA。 这里发布的解决方法对我来说不适用Swift namespace conflict

这似乎是swift中报告的错误: https://bugs.swift.org/browse/SR-898

3 个答案:

答案 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) {

}