“Cannot inherit from non-open class” swift

前端 未结 2 477
我寻月下人不归
我寻月下人不归 2021-01-03 17:56

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

相关标签:
2条回答
  • 2021-01-03 18:32

    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.
    0 讨论(0)
  • 2021-01-03 18:33

    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.

    0 讨论(0)
提交回复
热议问题