两个在不同文件中具有相同名称的类?

时间:2015-12-16 16:57:47

标签: swift enums encapsulation

我不知道这是否可行,或者我是否应该这样做。

示例两个不同的文件,相同的枚举:

Counter.swift

enum Action {
   case Increment
   case Decrement
}

Counterpair.swift

enum Action {  // invalid redeclaration of 'Action'
   case Reset
   case Top(Action) // Action should be Counter.Action
   case Bottom(Action) // same
}

我来自javascript,您可以在Counter.Action之后require(Counterpair)进行操作。

如何在不破坏封装的情况下以Counter或Counterpair(或其他任何模块)描述枚举Action的方式构建我的应用程序?

1 个答案:

答案 0 :(得分:2)

您似乎已经接触过模块术语。在Swift中,您不能只导入一个文件。您只能导入其他模块(示例可能是Foundation,UIKit,CoreData等框架)。基本上,这意味着项目中的所有文件都形成一个模块。因为它们都是同一模块的一部分,所以您的所有文件都可以在项目中相互看到。您可以使用Swift的访问控制功能来设置文件的哪些部分彼此可见,或者设置为导入代码的其他模块。

对您的情况最简单和最简单的解决方法是简单地为您的枚举提供两个不同的名称。

enum Behavior {
   case Increment
   case Decrement
}

enum Action {
   case Reset
   case Top(Behavior)
   case Bottom(Behavior)
}