如何才能将类从一个文件访问另一个文件中的另一个类(有点像朋友类功能)

时间:2015-05-08 20:48:01

标签: ios swift friend access-control

假设我有两种类型:DataObjectDataObjectManager,它们每个都有自己的swift文件,以保持整洁干净。

DataObjectManager符合名称的含义:它管理DataObjectDataObjectManager是一个单例,它拥有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

1 个答案:

答案 0 :(得分:1)

目前,Swift中只有三个访问修饰符选项。

  • internal - 这是默认状态。这意味着您可以访问同一目标中任何其他文件中的类/函数/属性。
  • private - 如您所知,这限制了对当前文件的访问权限。
  • public - 这允许从任何目标中的任何文件进行访问。

如果你不能用这三条规则做你需要的事情,那么你就无法做到。

所以你必须决定哪个是"更混乱" - 将两个类放在同一个源文件中(假设只有DataObjectManager实际上在文件外部使用,似乎可以接受),或保留init方法和属性internal

来源:in the package.json for the project