在Swift中,内部和公共访问修饰符之间有什么区别?

时间:2017-01-19 12:35:09

标签: swift swift3

Swift提供5种访问修饰符:openpublicinternalfileprivateprivate

我对这些说明符的了解(主要来自link& link_2

open 表示类和类成员可以在定义模块(目标)内外进行子类化和覆盖。

fileprivate 将实体的使用限制在其定义的源文件中。基本上可以通过单个文件中的多个类访问。

private 将实体的使用限制在其封闭声明中。

现在,公共和内部对我来说几乎是一样的: -

public 表示类和类成员只能在定义模块(目标)中进行子类化和覆盖

internal 允许实体在定义模块(目标)中使用。此外,如果没有提到其他内容,这恰好是默认说明符。在定义应用程序或框架的内部结构时,我们通常会使用内部访问。

那么公共和内部基本上有何区别?

这是我的第一个问题,如果我错过了任何细节,请告诉我。提前谢谢。

2 个答案:

答案 0 :(得分:2)

无论您标记为公开,都可以在您的应用内以及您应用(模块)之外使用。如果您将某些内容标记为内部,则只能在您的应用(模块)中使用。这对于开发库(框架)非常有用,可以使用内部隐藏库结构 A.swift和D.swift的公共成员可以使用C.swift和D.swift。唯一的限制是类不能被子类化(它们需要打开。) - 我的答案基于@Keaz& @Alexander。

答案 1 :(得分:1)

来自Access Control manual

  

打开访问权限和公共访问权限实现在任何实体中使用   来自其定义模块的源文件以及来自的源文件   另一个导入定义模块的模块。你通常使用   指定a的公共接口时的open或public访问权限   框架。描述了开放和公共访问之间的区别   下面。

     

内部访问允许在任何来源中使用实体   来自其定义模块的文件,但不在任何源文件之外   那个模块。您通常在定义应用程序时使用内部访问权限   或框架的内部结构。

差异在于对其他模块的可见性。

编辑回答@iCode评论:

你不需要所有这些。

对于最简单的小型单开发应用程序,仅使用默认的internal就足够了。

如果您需要正确操作,可以添加fileprivate / private个访问者来隐藏某些实现。

如果您正在开发大型应用程序并希望将代码分离到模块中,或者如果您正在开发库,则需要使用public / open来创建模块间接口。