Swift 3.0:专用与文件专用

私人的

根据Apple的文档,“私有访问将实体的使用限制为包含在声明中。”私有访问是最严格的访问级别。 基本上,这仅意味着您无法在定义私有实体的范围之外访问私有类型/功能/属性。

在下面的示例中,由于var visibleButton和func getAge()都在PrivatePerson类中定义,因此我们可以在PrivatePerson类的整个范围内访问这些函数。 但是,我们无法访问PrivatePerson扩展内的那些实体,因为该扩展不在定义私有实体的类的范围之内。

根据上面的知识,您能解释为什么我将handleTapGesture函数设为私有吗?

由于handleTapGesture函数是一个辅助方法,将由扩展中的configButtons()函数调用,因此,我决定仅对扩展访问函数。 如果我尝试在类的定义内调用handleTapGesture函数,则会收到“由于’私有’保护级别而无法访问”错误。

文件私有

根据Apple的文档,“ Fileprivate访问将实体的使用限制为自己定义的源文件。”如果您熟悉Swift 2.0,则fileprivate等同于Swift 2.0的私有文件。

文件私有和私有之间的主要区别如下所示。 可以在整个文件中访问Fileprivate实体。 在下面的示例中,即使在FileprivatePerson类中定义了var invisibleButton和getName(),我们仍然可以在FileprivatePerson扩展中访问它们。

您可能想知道为什么从未将实体定义为私有/文件私有,并且从未收到任何警告。 这是因为Swift的默认值为“内部”,这意味着实体(类型/功能/属性等)可被包括实体定义的整个应用/框架访问。 就您对所编写代码的体贴程度而言,将实体定义为私有/文件私有只是迈出了一步。 编码愉快! 🤓