Swift 3:公共访问修饰符和内部访问修饰符之间的区别? [复制]

Posted

技术标签:

【中文标题】Swift 3:公共访问修饰符和内部访问修饰符之间的区别? [复制]【英文标题】:Swift 3: The difference between Public and Internal access modifiers? [duplicate] 【发布时间】:2017-08-11 09:01:36 【问题描述】:

我阅读了 Apple 关于 Swift 3 中访问修饰符的参考资料。我在 *** 上也阅读了相同的内容,但我没有像提问的人那样得到答案。按照我的正确理解,有四个级别:

    公开,公开 内部 文件私有 私人

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

【问题讨论】:

对于 FilePrivate 和 Private 不同的阅读 this blog ,你可以很容易理解 @SunilPrajapati 谢谢。第三层和第四层是明确的。问题只是关于 Open 和 Public 修饰符。 以Click Here和Second Link为例阅读答案 Swift Access Control 【参考方案1】:

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

Public - 在这里您可以访问所有数据成员和成员 在同一模块内部和外部发挥作用。但你不能 子类化或覆盖模块外。

Open - 与 public 相同,唯一的区别是您可以子类化或 在模块外覆盖。

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

私人 - 这是您可以在以下范围内访问的地方 函数体或类。

【讨论】:

(Swift 4+) 私有:也可以在扩展中访问 private 不能在扩展中访问。 私有:也可以在扩展中访问,但只能在同一个文件中访问【参考方案2】:

您标记为 public 的任何内容都可以在您的应用内和应用(模块)之外使用。 如果您将某些内容标记为 internal 只能在您的应用程序(模块)中使用。这在您开发库(框架)时非常有用,您可以使用 internal 来隐藏库结构。

【讨论】:

好主意。这让我更接近于理解。谢谢。【参考方案3】:

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

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

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

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

文件私有 访问将实体的使用限制在其自己的定义源文件中。当在整个文件中使用特定功能的实现细节时,使用文件私有访问隐藏这些细节。

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

摘自:Apple Inc. “Swift 编程语言 (Swift 3.1)。”电子书。 https://itun.es/gb/jEUH0.l”

【讨论】:

【参考方案4】:

Swift 访问修饰符

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

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

通过class 访问fieldmethod 继承与开闭原则[About] 扩展、包装 后继class(子类)访问修饰符应该相同或限制它(private除外fileprivate除外)。 后继 method(override) 访问修饰符应该相同或展开

[Java access modifiers]

【讨论】:

【参考方案5】:

您的图表不正确。

A.swiftB.swift 的公共成员可通过 C.swiftD.swift 获得。唯一的限制是类不能被子类化(它们必须是open

【讨论】:

在我看来,作为初学者,这并不明显,但目前我感觉到了不同。谢谢!【参考方案6】:
•   Public - Can be used from any module but can’t be subclassed outside defining module (target).

•   Internal - This is default access modifier in swift. Can be accessible from the defining module (target) only.

•   Open - Can be used from any module and can be subclassed outside defining module (target).

•   Swift 4+

•   Fileprivate - Fileprivate members and functions are accessible within the same file, within the extension in same file

•   Private - Private members and functions are accessible within the same file, within the extension in same file.

【讨论】:

以上是关于Swift 3:公共访问修饰符和内部访问修饰符之间的区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

修饰符和多态

Swift、访问修饰符和单元测试

php面向对象-修饰符和抽象类和接口

超类引用上的访问修饰符和方法[重复]

JAVA中的访问修饰符和包

typescript 访问修饰符和 javascript 访问修饰符有啥区别?在使用打字稿时我应该更喜欢哪一个?