为什么要编译?
internal class A {
public func f() {
}
}
我预计公共"公共"因为它的封闭类是内部的,所以不允许使用修饰符。
答案 0 :(得分:6)
允许这一点的一个动机在SE-0025: Scoped Access Level(强调我的)中提到:
如果在具有更严格访问权限的类型中使用更广泛的访问控制级别,则编译器不应发出警告,例如
internal
类型中的private
。 这允许类型的所有者设计他们将使用的访问权限,以便更广泛地访问类型。(成员仍然无法在封闭的词法范围之外访问,因为类型本身仍然受限制,即外部代码永远不会遇到该类型的值。)
因此,虽然它不会改变成员的可访问性,但是如果封闭类型具有更广泛的访问级别,它允许开发人员传达他们认为给定成员应具有的访问级别 - 这可能是有用的对于当前具有internal
类型的API,计划在将来的版本中生成public
。
答案 1 :(得分:0)
Swift参考文献在访问级别指导原则下说明,
没有实体可以用另一个具有较低实体的实体来定义 (限制性更强)访问级别。
因此,我认为这并不意味着无法根据具有更高访问级别的另一个实体来定义实体。事实上,这肯定是必要的。