Swift提供5种访问修饰符:open
,public
,internal
,fileprivate
和private
。
我对这些说明符的了解(主要来自link& link_2)
open
表示类和类成员可以在定义模块(目标)内外进行子类化和覆盖。
fileprivate
将实体的使用限制在其定义的源文件中。基本上可以通过单个文件中的多个类访问。
private
将实体的使用限制在其封闭声明中。
现在,公共和内部对我来说几乎是一样的: -
public
表示类和类成员只能在定义模块(目标)中进行子类化和覆盖。
internal
允许实体在定义模块(目标)中使用。此外,如果没有提到其他内容,这恰好是默认说明符。在定义应用程序或框架的内部结构时,我们通常会使用内部访问。
那么公共和内部基本上有何区别?
这是我的第一个问题,如果我错过了任何细节,请告诉我。提前谢谢。
答案 0 :(得分:2)
无论您标记为公开,都可以在您的应用内以及您应用(模块)之外使用。如果您将某些内容标记为内部,则只能在您的应用(模块)中使用。这对于开发库(框架)非常有用,可以使用内部隐藏库结构 A.swift和D.swift的公共成员可以使用C.swift和D.swift。唯一的限制是类不能被子类化(它们需要打开。) - 我的答案基于@Keaz& @Alexander。
答案 1 :(得分:1)
打开访问权限和公共访问权限实现在任何实体中使用 来自其定义模块的源文件以及来自的源文件 另一个导入定义模块的模块。你通常使用 指定a的公共接口时的open或public访问权限 框架。描述了开放和公共访问之间的区别 下面。
内部访问允许在任何来源中使用实体 来自其定义模块的文件,但不在任何源文件之外 那个模块。您通常在定义应用程序时使用内部访问权限 或框架的内部结构。
差异在于对其他模块的可见性。
编辑回答@iCode评论:
你不需要所有这些。
对于最简单的小型单开发应用程序,仅使用默认的internal
就足够了。
如果您需要正确操作,可以添加fileprivate
/ private
个访问者来隐藏某些实现。
如果您正在开发大型应用程序并希望将代码分离到模块中,或者如果您正在开发库,则需要使用public
/ open
来创建模块间接口。