38

从 Xcode 8 beta 6 开始,我现在在其定义模块之外收到编译错误“无法从非开放类(类)继承”

我继承的类是一个单独的 Swift 框架的一部分,但我的项目是为 Xcode 8 beta 5 编译的。我需要更改什么才能让我的项目再次编译?

4

2 回答 2

69

自己找到了答案。

在 Swift 3 中,您现在可以将类标记为,open而不是public允许模块外部的文件对该类进行子类化。

只需public在您的模块类中替换为open.

参考这里

于 2016-08-16T15:58:56.630 回答
29

您继承的类需要定义为open而不是public.

更多关于 Swift 3 中访问控制更改的上下文:

Swift 2 只有 3 个访问级别:

  • private:实体仅在定义它们的源文件中可用。
  • internal:实体可用于包含定义的整个模块。
  • public: 实体旨在用作 API,并且可以由任何导入模块的文件访问。

Swift 3 增加了 2 个访问级别 ( openand fileprivate) 并改变了private:

  • private: 符号仅在当前声明中可见。
  • fileprivate: 在当前文件中可见的符号。
  • internal: 在当前模块或默认访问修饰符中可见的符号。
  • public: 在当前模块外可见的符号。
  • open: 用于在当前模块之外子类化或覆盖类或函数。
于 2016-08-22T06:57:08.780 回答