可可豆荚模块迅速解决命名空间冲突

Tah*_*Haq 5 ios cocoapods swift

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

如果我尝试Foo在这样的NameA模块中引用:

NameA.Foo
Run Code Online (Sandbox Code Playgroud)

它不起作用是因为编译器认为我是在指类NameA,而不是在模块NameASwift命名空间冲突,这里发布的解决方法对我不起作用

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

Gaz*_*ini 7

  • 不要 import NameA

  • 相反,import enum NameA.Foo(注意关键字“ enum”也可以用于“ struct”,“ class”或“ func”)

  • 引用Foo(您的枚举)或NameA.Foo(他们的枚举)。

如果您需要NameA在与以下文件相同的文件中进行引用NameA.Foo

  • 为您的“包装器”类型创建一个新文件:

import NameA typealias NameAWrapper = NameA

  • 与其他文件中NameA一样引用该类,NameAWrapper而无需直接导入模块。

这是受此解决方法(您已链接到)的启发,但根据您的情况进行了稍微修改:https : //stackoverflow.com/a/26774102/358806


Mik*_*ole 0

我最近遇到了类似的问题。您不会喜欢我找到的解决方案,但无论如何我都会分享它。我不得不分叉我正在使用的 pod,并将其重命名为新名称。新项目名称不再与类名称冲突,我可以将其命名为MyForkedName.ClassName. 这确实是一种不方便的方法,但在我们的例子中,它是一个较旧的库,在一段时间内没有改变(并且我们将来将完全删除该库),所以我愿意现在就解决。