我有涉及该具有相同名称的公共枚举两个不同的CocoaPods一个有趣的问题。
使用隐式命名空间,这是不正常,只是两者的CocoaPods有一类就是同他们的目标名称的问题。
所以,如果我在同一个文件引用具有相同名称的枚举同时导入的CocoaPods产生一个“枚举名称不明确在这个上下文类型查找”,如果我试图通过ModuleName.enum引用枚举斯威夫特说,模块名不有一个成员叫枚举。
据推测,这是因为类,而不是命名空间不有一个成员叫枚举。任何人都知道解决的办法?
下面是这个样子的代码:
Cocoapod答:
public enum Test {
}
public class A {
}
Cocoapod B:
public enum Test {
}
public class B {
}
其他文件:
import A
import B
// Results in "A does not have a member named Test"
var test: A.Test = A.Test(rawValue: "a")
// Results in "Test is ambiguous for type lookup in this context"
var test: Test = Test(rawValue: "a")
有一个简单的办法解决这个,虽然我不知道为什么斯威夫特不喜欢Namespace.ClassName
语法。
创建一个新的文件,并添加以下代码:
import A
typealias ATest = Test
然后,在你的文件,你可以这样做:
import B
var testA: ATest = ATest(rawValue: "a")
var testB: Test = Test(rawValue: "a")
或者,您可以创建BTEST等效typealias文件中。
人们需要导入特定类型,以使其您的文件命名空间之前,其他类似命名的类型。
我将使用SwiftMessages
框架为例,那里的枚举Theme
冲突与另一个框架一样命名的类。
SwiftMessages
也存在为框架内的一类,而斯威夫特总是认为我想,当我键入SwiftMessages.Theme
访问类。
import enum SwiftMessages.Theme
现在你可以使用Theme
var theme: Theme
这将是预期的主题。
如果您仍然有冲突,建立一个独立的源文件
// e.g. SwiftMessages+Support.swift
import enum SwiftMessages.Theme
typealias SwiftMessagesTheme = SwiftMessages.Theme
然后在其他地方使用它:
var theme: SwiftMessagesTheme
在斯威夫特4.x和Xcode的10 typealias
解决方案不起作用。
相反,你可以使用Module.Class
,你的情况只是使用A.Test
或B.Test
。