2016-08-22 5 views
1

Nachdem ich nach neuesten Xcode 8 aktualisiert, bekomme ich diesen Fehler:Xcode 8: Kann nicht von nicht-offenen Klasse erben

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

Meine Klasse wie dieses

erklärt
public class ProfileViewController: WDBaseViewController { 
} 

Aber ich didn‘ t ändere den Rahmen.

+0

Die Basisklasse 'WDBaseViewController' muss in dem von Ihnen verwendeten Framework als' open' anstatt als 'public' definiert werden. –

+0

Siehe auch [Was ist das 'open' Schlüsselwort in Swift?] (Http://stackoverflow.com/questions/38947101/what-is-the-open-keyword-in-swift), und das Xcode 8 Beta 6 Release Anmerkungen. –

+0

Ja, ich habe es gefunden. Vielen Dank. –

Antwort

9

Kurze Antwort:

Um in der Lage sein, es zu Unterklasse, die Basisklasse WDBaseViewController muss als open definiert werden statt public im Rahmen Sie verwenden.

open class WDBaseViewController { 
    ... 
} 

Wenn es ein interner Rahmen ist können Sie es selbst tun, sonst müssen Sie warten, bis der Autor Swift 3.

Lange Antwort zu unterstützen:

Swift 3 ist signifikant zu bringen Änderungen an der Zugriffssteuerung

Swift 2 hatte nur drei Zugriffsebenen:

  • private: Einheiten sind nur verfügbar, von innerhalb der Quelldatei, in der sie definiert sind.
  • internal: Entitäten sind für das gesamte Modul verfügbar, das die Definition enthält.
  • public: Entitäten sind für die Verwendung als API vorgesehen und können von jeder Datei, die das Modul importiert, aufgerufen werden.

Swift 3 ist das Hinzufügen von 2 weiteren Zugriffsebenen (open und fileprivate) und die Änderung der Bedeutung von private:

  • private: Symbol sichtbar innerhalb der aktuellen Erklärung nur.
  • fileprivate: Symbol in der aktuellen Datei sichtbar.
  • internal: Symbol im aktuellen Modul sichtbar.
  • public: Symbol außerhalb des aktuellen Moduls sichtbar.
  • open: für Klasse oder Funktion außerhalb des aktuellen Moduls subclassed oder außer Kraft gesetzt werden.