假设我有两种类型:DataObject
和DataObjectManager
,它们每个都有自己的swift文件,以保持整洁干净。
DataObjectManager
符合名称的含义:它管理DataObject
。 DataObjectManager
是一个单例,它拥有DataObject
的实例,特别是activeDataObject
,这是项目其余部分用来获取DataObject
的获取者他们需要的数据。
我不希望项目中的其他代码模块能够更改activeDataObject
的属性,因此我使用private(set)
访问控制定义了几乎所有的属性。这使得其余代码无法修改DataObject
的属性。但这也使DataObjectManager
无法修改它们。另外,我只希望DataObjectManager
能够创建DataObject
个实例,但我不能将init
声明为私有,因为DataObjectManager
位于不同的文件中。
我知道一个解决方案,即将所有DataObject
类代码移动到DataObjectManager
的类文件的顶部(或底部),但我将它们放在单独的文件中不是为了功能,而是为了整洁。
有没有办法保持我的单独文件整洁,仍然可以获得我正在寻找的访问控制?或者是我唯一的选择,只需将DataObject
类放入DataObjectManager
的类文件(或直接类),并将所有属性标记为private(set)
和{{1} } init
?
编辑:看看这款雷达,了解我的意思。 http://www.openradar.appspot.com/17136480
答案 0 :(得分:1)
目前,Swift中只有三个访问修饰符选项。
internal
- 这是默认状态。这意味着您可以访问同一目标中任何其他文件中的类/函数/属性。private
- 如您所知,这限制了对当前文件的访问权限。public
- 这允许从任何目标中的任何文件进行访问。如果你不能用这三条规则做你需要的事情,那么你就无法做到。
所以你必须决定哪个是"更混乱" - 将两个类放在同一个源文件中(假设只有DataObjectManager
实际上在文件外部使用,似乎可以接受),或保留init
方法和属性internal
。