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?
The class you inherit from needs to be defined as
open
instead ofpublic
.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
andfileprivate
) and changing the meaning ofprivate
: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.Found the answer myself.
In Swift 3 you can now mark a class as
open
instead ofpublic
this allows files outside of the module to subclass that class.Simply replace
public
in your module class withopen
.Reference here.