"Cannot inherit from non-open class" swift
Solution 1
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.
Solution 2
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.
![LOP_Luke](https://i.stack.imgur.com/ITm1Q.jpg?s=256&g=1)
LOP_Luke
Updated on June 13, 2022Comments
-
LOP_Luke about 2 years
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?
-
Martin R almost 8 yearsAlso documented in the Xcode 8 beta 6 Release Notes.