"不能从非公开课继承"迅速

时间:2016-08-16 15:53:14

标签: swift xcode8-beta6

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

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

2 个答案:

答案 0 :(得分:48)

自己找到答案。

在Swift 3中,您现在可以将类标记为open而不是public,这允许模块外部的文件继承该类。

只需使用public替换模块类中的open

参考here

答案 1 :(得分:20)

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

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

Swift 2只有3个访问级别:

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

Swift 3增加了2个访问级别(openfileprivate)并更改了private的含义:

  • private:仅在当前声明中可见的符号。
  • fileprivate:符号在当前文件中可见。
  • internal:当前模块中可见的符号。
  • public:符号在当前模块外可见。
  • open:用于在当前模块外部进行子类化或覆盖的类或函数。