【发布时间】:2017-01-22 22:16:09
【问题描述】:
在swift中,何时显式使用访问修饰符“internal”,同时声明一个类,有什么影响?
【问题讨论】:
标签: swift
在swift中,何时显式使用访问修饰符“internal”,同时声明一个类,有什么影响?
【问题讨论】:
标签: swift
它不会对编译器产生影响,因为它是默认设置(但见下文)。但它可以通过发出意图信号对阅读代码的开发人员产生影响。例如,考虑一个嵌套类型:
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 中发生了变化。
【讨论】:
如果您希望方法/属性只能在当前模块内访问,而不是在外部访问,请使用 internal。来自 Apple 的Language Guide:
内部访问使实体可以在其定义模块的任何源文件中使用,但不能在该模块之外的任何源文件中使用。在定义应用或框架的内部结构时,您通常会使用内部访问。
【讨论】: