Xcode 8:不能从非公开类继承

时间:2016-08-22 06:05:15

标签: ios swift xcode swift3

我更新到最新的Xcode 8后,出现此错误:

  

无法从其定义模块

之外的非开放类'WDBaseViewController'继承

我的班级被宣布为

public class ProfileViewController: WDBaseViewController {
}

但我没有改变框架。

1 个答案:

答案 0 :(得分:23)

简答:

为了能够对其进行子类化,基类WDBaseViewController需要在您使用的框架中定义为open而不是public

open class WDBaseViewController {
    ...
}

如果它是一个内部框架,你可以自己做,否则你将不得不等待作者支持Swift 3。

答案很长:

Swift 3正在为访问控制带来重大变化。

Swift 2只有3个访问级别:

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

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

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