【问题标题】:In swift, when would explicitly using the access modifier "internal", while declaring a class, have any effect?很快,什么时候显式使用访问修饰符“internal”,同时声明一个类,有什么影响?
【发布时间】:2017-01-22 22:16:09
【问题描述】:

在swift中,何时显式使用访问修饰符“internal”,同时声明一个类,有什么影响?

【问题讨论】:

    标签: swift


    【解决方案1】:

    它不会对编译器产生影响,因为它是默认设置(但见下文)。但它可以通过发出意图信号对阅读代码的开发人员产生影响。例如,考虑一个嵌套类型:

    public struct X {
        struct Y {
             init() {}
        }
    }
    

    普通读者可能认为Y 是公开的,因为X 是公开的。但这种情况并非如此。 Y 是内部的。在定义中添加明确的internal 可以清楚地表明缺少public 是故意的,而不是疏忽。

    目前,internal 可能会造成误导。例如:

    private struct X {
        internal struct Y {
             init() {}
        }
    }
    

    人们可能认为这是一个错误(或至少是一个警告),但事实并非如此。这实际上是预期的行为(由SE-0025 描述)。如果您想了解有关访问控制当前状态的更多信息,我推荐 SE-0025,因为它们在 Swift 3 中发生了变化。

    【讨论】:

      【解决方案2】:

      如果您希望方法/属性只能在当前模块内访问,而不是在外部访问,请使用 internal。来自 Apple 的Language Guide

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-10
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2017-06-04
        • 2011-01-15
        相关资源
        最近更新 更多