假设我有两种类类型:DataObject
和DataObjectManager
,它们都有自己的swift文件,以保持整洁。
DataObjectManager
顾名思义:它管理DataObject
s。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编程语言