我已经阅读了有关新修饰符“open”和“fileprivate”的文档。但是有两点我不明白:
- 为什么不能将协议或扩展也声明为“开放”?这是否意味着不可能在模块之外使用这些东西?
- 如果我不想为一个模块而是一个通用应用程序构建我的类,我应该将我的类和方法声明为“开放”还是只将它们保持为“公共”是一种好习惯?
正如这个答案所说:
我认为您的第一个问题的答案是您不能覆盖或子类化协议或扩展。因此,这些东西没有用,open
因为public
已经使它们可以在模块之外访问。
对于你的第二个问题,我想说你应该只声明你自己的类,就open
好像你打算覆盖或继承一样。否则,您将允许对这些项目进行不必要的访问。大多数时候public
应该满足您的需求。
编辑:
正如@Alex 指出的那样,我认为允许这种“额外访问”没有很多缺点。我能想到的唯一一件事是,如果您只是想保护您的课程免受未来自我的影响,但这可能适用也可能不适用。因此,如果不是这种情况,将它们设置为open
默认值应该不会有太大的危害。
open用于另一个模块,例如在我们在单元测试或可可豆荚中使用它时,您可以从 pod继承(如果是:open class somePod {...})或覆盖某些函数(如果是:open func someFunctionInPod {...}) 在您的项目中。