“无法从非开放类继承”swift

zpf6vheq  于 2022-11-21  发布在  Swift
关注(0)|答案(3)|浏览(135)

从Xcode 8 beta 6开始,我现在在其定义模块之外收到编译错误“无法从非开放类(类)继承”
我所继承的类是一个单独的Swift框架的一部分,但我的项目是为Xcode 8 beta 5编译的。我需要做什么更改才能使我的项目再次编译?

wn9m85ua

wn9m85ua1#

自己找到了答案。
在Swift 3中,你现在可以将一个类标记为open而不是public,这允许模块外的文件子类化该类。
只需将模块类中的public替换为open即可。
参考here

jbose2ul

jbose2ul2#

您继承的类别必须定义为open,而非public
更多关于Swift 3中访问控制更改的内容:
Swift 2只有3个访问级别:

  • private:实体只能从定义它们的来源档案中使用。
  • internal:实体可用于包含定义的整个模块。
  • public:实体是作为API使用的,可以由任何导入模块的文件访问。

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

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

t30tvxxf3#

即使在将类标记为open(在Xcode 14.1上)之后,我也遇到了这个错误。修复是一个干净的(Cmd + Shift + K)和重建。

相关问题