类名相同的命名空间的问题

问题描述 投票:5回答:3

我有涉及该具有相同名称的公共枚举两个不同的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")
swift enums namespaces cocoapods
3个回答
1
投票

有一个简单的办法解决这个,虽然我不知道为什么斯威夫特不喜欢Namespace.ClassName语法。

创建一个新的文件,并添加以下代码:

import A

typealias ATest = Test

然后,在你的文件,你可以这样做:

import B

var testA: ATest = ATest(rawValue: "a")
var testB: Test = Test(rawValue: "a")

或者,您可以创建BTEST等效typealias文件中。


1
投票

人们需要导入特定类型,以使其您的文件命名空间之前,其他类似命名的类型。

我将使用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

0
投票

在斯威夫特4.x和Xcode的10 typealias解决方案不起作用。

相反,你可以使用Module.Class,你的情况只是使用A.TestB.Test

© www.soinside.com 2019 - 2024. All rights reserved.