swift - 不同文件中的两个同名类?

标签 swift enums encapsulation

我不知道这是否可能,或者我是否应该做这样的事情。

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

计数器.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,你可以在 require(Counterpair) 之后执行 Counter.Action

如何以 Counter 或 Counterpair(或任何其他模块)可以描述枚举操作而不破坏封装的方式构建应用程序?

最佳答案

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

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

enum Behavior {
   case Increment
   case Decrement
}

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

关于swift - 不同文件中的两个同名类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34317779/

相关文章:

ios - 当关闭 View Controller 时,将 UICollectionView 的选定状态保存在 UITableViewCell 中

ios - Swift:创建具有不同自定义类型的数组

swift - UITableview 在 View 顶部添加空白

Python 等效于 C# Enum.HasFlag

java - 显示信息的同时保留封装

swift - 错误 : execution was interrupted, 原因 : breakpoint 1. 2. Xcode 7.1、Swift

java - 将枚举类型添加到列表

javascript - 你能在 TypeScript 类中设置静态枚举吗?

python - 了解 __getattr__ 和 __getattribute__ 之间的区别

swift - "public"在 Swift 中意味着什么?