我如何才能提供一个类从一个文件到另一个文件中的另一个类的访问权限(有点像朋友类功能)



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

DataObjectManager顾名思义:它管理DataObjects。DataObjectManager是一个单例,它拥有DataObject的实例,尤其是activeDataObject,它是项目其他部分用来获取DataObject的getter,CCD_8保存了他们需要的数据。

我不希望我的项目中的其他代码模块能够更改activeDataObject的属性,所以我已经用private(set)访问控制定义了它的几乎所有属性。这使得代码的其余部分无法修改DataObject的属性。但这也使DataObjectManager无法修改它们。此外,我只希望DataObjectManager能够创建DataObject实例,但我不能将init声明为私有,因为DataObjectManager在不同的文件中。

我知道一个解决方案,那就是将所有DataObject类代码移到DataObjectManager类文件的顶部(或底部),但我将它们放在单独的文件中,不是为了功能,而是为了整洁。

有什么方法可以保持我单独的文件整洁,同时仍然获得我想要的访问控制吗?或者,我唯一的选择是将DataObject类放入DataObjectManager的类文件(或直接将类),并将所有属性标记为private(set),将init标记为CCD23?

编辑:看看这个雷达就能理解我的意思。http://www.openradar.appspot.com/17136480

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

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

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

因此,您必须决定哪一个更"混乱"——将两个类都放在同一个源文件中(假设在文件外部实际使用的是DataObjectManager,这似乎是可以接受的),还是保留init方法和属性internal

来源:Swift编程语言

最新更新