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

LOP*_*uke 26 swift xcode8-beta6

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

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

LOP*_*uke 50

我自己找到了答案.

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

只需public在模块类中替换即可open.

参考这里.

  • 还记录在Xcode 8 beta 6发行说明中. (2认同)

Yan*_*son 21

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

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

Swift 2只有3个访问级别:

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

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

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