Xcode8: 不能从非开放继承class

Xcode 8: Cannot inherit from non-open class

我更新到最新的 Xcode 8 后,我得到这个错误:

Cannot inherit from non-open class ‘WDBaseViewController’ outside of its defining module

我的class是这样声明的

public class ProfileViewController: WDBaseViewController {
}

但是我没有改框架

简答:

为了能够子class它,基础class 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: 对于 class 或要在当前模块外被子class 或覆盖的函数。