“Cannot inherit from non-open class” swift

2020-03-01 03:18发布

As of Xcode 8 beta 6 I now get the compile error "Cannot inherit from non-open class (Class)" outside of its defining module"

The class I was inheriting from was part of a separate Swift framework but my project compiled for Xcode 8 beta 5. What do I need to change to get my project to compile again?

2条回答
啃猪蹄的小仙女
2楼-- · 2020-03-01 03:22

The class you inherit from needs to be defined as open instead of public.

A bit more context on the changes to access control in Swift 3:

Swift 2 only had 3 access levels:

  • private: entities are available only from within the source file where they are defined.
  • internal: entities are available to the entire module that includes the definition.
  • public: entities are intended for use as API, and can be accessed by any file that imports the module.

Swift 3 is adding 2 more access levels (open and fileprivate) and changing the meaning of private:

  • private: symbol visible within the current declaration only.
  • fileprivate: symbol visible within the current file.
  • internal: symbol visible within the current module or default access modifier.
  • public: symbol visible outside the current module.
  • open: for class or function to be subclassed or overridden outside the current module.
查看更多
叼着烟拽天下
3楼-- · 2020-03-01 03:45

Found the answer myself.

In Swift 3 you can now mark a class as open instead of public this allows files outside of the module to subclass that class.

Simply replace public in your module class with open.

Reference here.

查看更多
登录 后发表回答