Swift 3:Public和Internal访问修饰符之间的区别?

Iva*_*rov 11 oop inheritance public internal swift

我在Swift 3中阅读了Apple关于访问修饰符的参考资料.我在stackoverflow上也读过同样的内容,但是我没有得到答案.据我所知,有四个层次:

  1. 公开,公开
  2. 内部
  3. Fileprivate
  4. 私人的

我为自己创建了方案,以了解所有这些修饰符之间的差异并在此处上传.如您所见,公共修饰符和内部修饰符之间没有区别.但是它们处于不同的级别.任何想法将不胜感激!

小智 13

  • 内部 - 这是swift中的默认访问说明符.有了这个,我们可以访问同一模块(目标)中的数据成员和成员函数.

  • 公共 - 您可以在此处访问同一模块内外的所有数据成员和成员函数.但是你不能在模块外部进行子类化或覆盖.

  • 打开 - 与公共一样,唯一的区别是您可以在模块外部进行子类化或覆盖.

  • Fileprivate - 顾名思义,数据成员和成员函数可以在同一个文件中访问.

  • 私有 - 您可以在函数体或类的范围内访问.

  • 私有:也可以在扩展中访问,但只能在同一文件中访问 (3认同)
  • (Swift 4+) Private:也可以在扩展中访问 (2认同)

ren*_*rda 7

Apple的The Swift Programming Language一书清楚地解释了这些访问修饰符:

"Swift为代码中的实体提供了五种不同的访问级别.这些访问级别与定义实体的源文件相关,也与源文件所属的模块相关.

开放访问公共访问使实体可以在其定义模块的任何源文件中使用,也可以在来自导入定义模块的另一个模块的源文件中使用.在指定框架的公共接口时,通常使用开放或公共访问.开放和公共访问之间的区别如下所述.

内部访问使实体可以在其定义模块的任何源文件中使用,但不能在该模块之外的任何源文件中使用.在定义应用程序或框架的内部结构时,通常使用内部访问.

文件专用访问将实体的使用限制在其自己的定义源文件中.当在整个文件中使用这些详细信息时,使用文件专用访问来隐藏特定功能的实现细节.

私人访问限制实体对封闭声明的使用.当这些详细信息仅在单个声明中使用时,使用私有访问来隐藏特定功能的实现细节

摘录自:Apple Inc."The Swift Programming Language(Swift 3.1)."iBooks.https://itun.es/gb/jEUH0.l "


yoA*_*ex5 7

快速访问修饰符

取决于类、函数或属性的访问修饰符,它可以被子类化、覆盖、可访问

访问修饰符可适用于classfield[关于]method。尝试访问、子类化或覆盖它。

  • 访问fieldmethod通过class
  • 继承与开闭原则【关于】
    • 扩展、包装
    • 后继class(子类)访问修饰符应该相同或对其进行限制private<->除外fileprivate)。
    • 后继method(覆盖)访问修饰符应该相同或扩展

[Java 访问修饰符]


Kea*_*eaz 6

无论您标记为公开,都可以在您的应用内和应用(模块)之外使用.如果您将某些内容标记为内部,只能在您的应用(模块)中使用.当您开发库(框架)时,这非常有用,您可以使用内部隐藏库结构.


Ale*_*ica 2

你的图表是不正确的。

A.swift和的公共成员B.swift可以访问C.swiftD.swift。唯一的限制是类不能被子类化(它们需要是open.