"Cannot inherit from non-open class"斯威夫特



作为Xcode 8 beta 6,我现在得到编译错误"不能从非开放类(类)继承"在其定义模块之外"

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

我自己找到了答案。

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

只需将模块类中的public替换为open

参考。

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

关于Swift 3中访问控制变化的更多背景信息:

Swift 2只有3个访问级别:

  • private:实体只能在定义它们的源文件中使用。
  • internal:实体可用于包含定义的整个模块。
  • public:实体被用作API,可以被任何导入该模块的文件访问。

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

  • private:符号只在当前声明中可见。
  • fileprivate:符号在当前文件中可见
  • internal:当前模块或默认访问修饰符中可见的符号。
  • public:符号在当前模块外部可见。
  • open:用于在当前模块之外子类化或重写的类或函数。

即使将类标记为open(在Xcode 14.1上),我也会出现此错误。修复是清理(Cmd + Shift + K)并重建。

相关内容

  • 没有找到相关文章

最新更新