迅速

2016-08-16 112 views
22

“无法从非公开课继承”作为Xcode的8测试版的6我现在得到的编译错误的定义模块”迅速

I类之外的“不能从非公开课(类)继承”从被继承是一个独立的斯威夫特框架的一部分,但我的项目编制了Xcode的8测试版5.我需要什么改变让我的项目重新编译?

+2

相关:http://stackoverflow.com/questions/38947101/what-is-an-open-var-in-swift –

回答

41

找到自己的答案。

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

只需用open替换模块类中的public即可。

参考here

+0

有趣。我甚至不知道这件事。 – Alexander

+2

也记录在Xcode 8 beta 6发行说明中。 –

+0

工作得很好!大! –

16

您继承的类需要定义为open而不是public。上的变化更多

的位上下文访问控制在夫特3:

夫特2只有3个访问级别:

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

夫特3加​​入2个访问级别(openfileprivate)和改变的private含义:

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